DateTime.ParseExact格式问题

3

我有一些类似以下格式的日期时间字符串:

"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 2009 100" 上失败了。我不确定应该使用什么格式?

为了澄清,我从源中以日期部分 "1 14" 和时间部分 "100" 的形式获取这些数据,因此我正在连接它们以便解析为 DateTime。

谢谢


哇,那个日期/时间格式比RFC 822的还要酷。 - Joey
你能否在必要时不用前导零写出小时数? - gkrogers
你可以在小时和分钟之间加一个冒号吗? - gkrogers
2个回答

6
我怀疑它将“100”解释为“10”后跟“0”,即将H或h解析为“10”,然后无法找到两个数字表示分钟。
老实说,我倾向于在解析之前手动重新格式化字符串,以便它始终以4位数字结尾而不是3位。虽然我通常不推荐使用它们,但这似乎是正则表达式的工作 :)
顺便说一下,我不确定为什么你同时拥有“H”和“h”格式-它永远不会匹配第二种格式,因为任何有效的第二种格式都适用于第一种。
如果按照我建议的方法修复字符串,那么您只需使用
{"M d yyyy HHmm", "M d yyyy 0"}

我在尝试中添加了“h”格式以解析失败的内容。我将尝试重新格式化时间部分,使其始终为“HHMM”。 - Karen
好的,我成功将时间部分转换为h:mm格式,所以我可以在我的精确解析中使用“M d yyyy H:m”,一切顺利。 - Karen

0

我认为它失败是因为"hmm"="100"在1:00上午或下午之间含糊不清。也许你应该坚持使用"Hmm"或者使用"hmm tt"="100 AM"格式。

编辑:尝试过但失败了。Jon在他的回答和我的评论中所说的是正确的。


1
不是上午/下午的歧义问题,而是小时和分钟之间的歧义。否则,1100也会失败,但实际上它是可以工作的... - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接