2009-11-25 70 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