2010-11-16 88 views
6

我试图以下String解析为DateTime对象在C#:DateTime.ParseExact根本不工作,为什么?

DateTime.ParseExact("20101108 230125", "yyyyMMdd hhmmss", null) 

虽然值看起来是正确的ParseExact方法只是不断给我下面的:

字符串未被识别为一个有效的DateTime。

有人可以告诉我为什么以及如何解析上面的字符串,而不必手动的方式吗?是不是ParseExact应该是为了这种场合?

回答

21

你有几个小时错格式,应该全部是大写:

DateTime.ParseExact("20101108 230125","yyyyMMdd HHmmss", null) 

小写hh指定时间采用12小时制(含AM/PM)。大写HH是24小时制时间。请致电documentation of custom DateTime format strings

+0

为什么会造成异常?就我个人而言,我希望将23转换为11而不是抛出异常。它是ParseExact导致它吗? – 2010-11-16 09:48:14

+1

@Marcus:'ParseExact'会做它说的;使用指定的* exact *格式解析字符串。由于'hh'告诉它希望在那个位置有一个12小时的时间值,'23'显然不在可接受值的范围内。它解析确切的字符串,不进行转换。所以是的,这个异常是由'ParseExact'方法抛出的。 – 2010-11-16 10:01:47

+0

干杯的扩展解释。 :) – 2010-11-16 10:13:09

2

尝试使用:

var dt = DateTime.ParseExact("20101108 230125", "yyyyMMdd HHmmss", null) 

的 “HH” 是12小时时间和 “HH” 24小时。

+0

哎呀刚刚看到Fredrik的回答... – 2010-11-16 09:05:37