2010-10-05 83 views
7

我正在解析一個字符串以將其轉換爲DateTime。我在某些情況下,得到一個錯誤:DateTime.Parse:更改文化時發生異常

String was not recognized as a valid DateTime. 

我只得到,如果我跑從位於不同的國家比美國的計算機應用此錯誤。我在字符串中看到的是09/20/2010 14:11,在這種情況下,我得到一個異常。如果我的值如下:10/05/2010 12:54我沒有發現異常。我想這是事實,那天是20,這臺電腦在歐洲,所以它認爲20是這個月。問題是我強迫它是EN-US:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", new CultureInfo("en-US")); 

因爲我收到例外,我想知道這是正確的做法。

任何想法如何解析一個字符串的方式,無論我在機器上運行什麼樣的文化?

+0

如果您知道格式將始終如此,您可以使用DateTime.Parse(值,CultureInfo.InvariantCulture);就日期和時間格式而言,InvariantCulture大致相當於en-US。順便說一句,如果你像這樣解析它,.Net將無法確定時區,它實際上會將你的日期時間視爲可能導致錯誤的「未指定的本地」。如果您知道該源使用UTC,請使用以下內容:DateTime.Parse(value,CultureInfo.InvariantCulture,DateTimeStyles.AssumeUniversal); – 2010-10-05 19:51:31

回答

10

您應該使用「HH:mm」而不是「hh:mm」 - 「HH」用於24小時制; 「hh」是一個12小時的時鐘。所以14不是「hh」的有效值。

即使在美國機器上,我也希望看到同樣的問題,但是......也許你碰巧由於時區差異而只能在美國機器上下午1點之前?

+0

我想,這是問題所在。它現在有效。 – tony 2010-10-05 18:10:55

+0

非常感謝您的及時幫助 Tony – tony 2010-10-05 18:11:27