2013-07-16 122 views
-3

我想我想念一個文化信息? (我不知道它是什麼)。 我得到這個日期從JSON:我該如何解析這個日期?

<created_at>Tue Jul 16 07:56:04 +0000 2013</created_at> 

但如果我嘗試:

var CreatedAt = DateTime.ParseExact((string)x["created_at"], "yyyy-MM-dd", null) 

我得到一個String was not recognized as a valid DateTime.例外。我應該使用什麼?

+0

你嘗試過什麼?您必須能夠使用[此處給出的示例](http://msdn.microsoft.com/zh-cn/library/w2sa9yss.aspx)來計算出某些內容。如果冒號(':')缺席讓'zzzz'格式混淆,請嘗試[創建自己的'DateTimeFormatInfo'](http:// stackoverflow。COM /問題/ 5247876 /在時間區如何對控制外觀的 - - 偏移時的解析格式化-DAT)。 – CodeCaster

+4

您的'ParseExact'期待格式爲'yyyy-MM-dd'的值。這甚至沒有*略微*與您提供的格式相同,是嗎? –

+6

閱讀文檔並不好玩。 StackOverflow,sudo使我成爲正確的模式格式。 – Jon

回答

1

嘗試使用這個模式來匹配剛剛日期:

ddd MMM dd HH:mm:ss zzz yyyy 

正如

var input = "Tue Jul 16 07:56:04 +0000 2013"; 
var pattern = "ddd MMM dd HH:mm:ss zzz yyyy" 
var result = DateTime.ParseExact(input, pattern, CultureInfo.InvariantCulture); 
Console.WriteLine(result.ToUniversalTime()); // 7/16/2013 7:56:04 AM 

或者這相匹配的日期周圍的XML標籤:

'<created_at>'ddd MMM dd HH:mm:ss zzz yyyy'</created_at>' 

var input = "<created_at>Tue Jul 16 07:56:04 +0000 2013</created_at>"; 
var pattern = "'<created_at>'ddd MMM dd HH:mm:ss zzz yyyy'</created_at>'"; 
var result = DateTime.ParseExact(input, pattern, CultureInfo.InvariantCulture); 
Console.WriteLine(result.ToUniversalTime()); // 7/16/2013 7:56:04 AM 

進一步閱讀

+0

我收到了同樣的信息! – markzzz

+0

隨着日期星期一7月15日16:06:09 +0000 2013它不工作! (它們有相同的模式) – markzzz

+1

@markzzz是的。自從我原來發布使用'HH'(24小時制)而不是'hh'(12小時制)以來,我已經更新了它。 –

0

嗯,這是因爲ParseExact意味着你告訴你的日期是在確切格式(這顯然它不是)的方法。

有問題的日期確實出現了一個相當特殊的格式,你需要做的是這樣的:

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", null); 

根據您的意見看來你的應用程序是一種文化不明白下運行提供的日期/時間格式 - 通過null將隱含地使用當前的文化(這通常是機器的文化)。在這種情況下,你需要通過CultureInfo.InvariantCulture,而不是null,之所以被這樣的字符串可以解析的獨立這是在執行任何本地規則/的本地化的即解析

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", CultureInfo.InvariantCulture); 
1

您可以使用此:

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", CultureInfo.InvariantCulture); 

注意:如果您的字符串不完全匹配(請參閱,Parse準確)您提供的格式..那麼它將無法正常工作。

+0

+1爲不變文化 –

+0

這似乎是完美的!但是,如果我把空值而不是CultureInfo.InvariantCulture我得到相同的錯誤信息... – markzzz

+0

@markzzz很清楚,你的機器運行的文化不隱式地理解傳入的格式。當你爲'IFormatProvider ''Parse'方法使用機器的當前文化格式,我在英國文化下運行,所以'null'對我來說工作正常,如果你的格式是文化*獨立的*那麼你應該使用'InvariantCulture'。 – James

1
DateTime.ParseExact("Tue Jul 16 07:56:04 +0000 2013", 
        "ddd MMM dd HH:mm:ss zzzz yyyy", 
        CultureInfo.InvariantCulture); 

Demo

注意HH是24小時格式,而不是hh