2009-11-25 122 views
3

我有看可以像日期時間字符串任何下列:DateTime.ParseExact格式質疑

「1 13 2009 2300」, 「1 14 2009 0」, 「1 14 2009 100」

,我需要解析成DateTime。

我曾嘗試:

string[] sExpectedFormats = {"M d yyyy Hmm", "M d yyyy hmm", "M d yyyy 0"}; 
DateTime dtReportDateTime = DateTime.ParseExact(sReportDateTime, 
sExpectedFormats, 
System.Globalization.CultureInfo.InvariantCulture, 
System.Globalization.DateTimeStyles.None); 

,但它的第三個 「1 14 100 2009年」 失敗。我不確定使用什麼格式?

爲了說明問題,我在Feed中以日期部分「1 14」和時間部分「100」的形式獲取此數據,因此我將它連接起來以便解析爲DateTime。

感謝

+0

哇,那個日期/時間格式比RFC 822格式還要嚴重。 – Joey 2009-11-25 16:39:27

+0

如果有必要,您是否可以不用寫出小時數? – gkrogers 2009-11-25 16:53:37

+0

或者,您可以在小時和分鐘之間添加冒號嗎? – gkrogers 2009-11-25 16:57:54

回答

6

嫌疑,它的解釋「100」爲「10」,後面的「0」 - 即解析H或H作爲「10」,然後,不知道兩位數字分鐘。

坦白說,我會忍不住解析,使其始終在4個位數,而不是3捨不得,因爲我平時要建議他們結束之前手動格式化字符串,這聽起來像是正則表達式工作:)

正如順便說一句,我不知道爲什麼你有「H」和「h」兩種格式 - 它永遠不會匹配第二格式,因爲任何有效的第二本來有效的第一。

如果你事先修復了字符串作爲我的建議,你就可以只使用

{"M d yyyy HHmm", "M d yyyy 0"} 
+0

我添加了「h」格式來嘗試解析出現故障的格式。 我會嘗試重新格式化時間部分,因此它總是「HHMM」 – Karen 2009-11-25 17:55:36

+0

OK,成功地將timepart進去啊轉換:mm格式,這樣我就可以用「M d YYYY H:M」在我的解析準確,所有的偉大工程。 – Karen 2009-11-25 18:18:11

0

我認爲失敗是因爲「哼」 =「100」是1:00 AM或PM之間的曖昧。也許你應該堅持「嗯」或使用「hmm tt」=「100 AM」格式。

編輯:嘗試失敗。喬恩在回答中說了什麼,我的評論是真實的。

+1

這不是am/pm的含糊不清 - 這是小時停止和分鐘開始的含糊不清。否則,它也會失敗1100,但實際上可行... – 2009-11-25 16:39:25