2013-07-22 57 views
5

我必须从格式yyyyMMddhhmmss格式的字符串解析DateTime对象。解析自定义日期时间格式

如果我运行这段代码,它工作正常:

DateTime y = new DateTime(2013, 07, 22, 15, 35, 23); 
string x = y.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

但是,如果我运行这段代码 - 看似相反的操作 - 我得到一个异常:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

唯一的例外是:

System.FormatException: String was not recognized as a valid DateTime. 

我很难过,因为这里有什么问题。我究竟做错了什么?

注意:不要担心时区。我可以在以后处理正确的时区。

+0

在第一码样本x是20130722033523,不20130722153523 – empi

回答

15

的问题是,您所指定的日期,时间格式使用hh为12小时格式,但输入字符串中有在这方面15。它不能解析这个,因为15超出了预期的范围。

尝试使用HH为24小时时间格式来代替:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); 

进一步阅读:

+3

直接来自MSDN:如果格式是自定义格式模式不包含日期或时间分隔符(例如“yyyyMMdd HHmm”),请使用供应商参数的不变文化和每个自定义格式说明符的最宽格式。例如,如果要以格式指定小时数,请指定较宽的格式“HH”,而不是较窄的格式“H”。 –

+3

+1。此外,请检查此:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx - (quote)**给调用方的说明**: 在.NET Framework 4中,ParseExact方法将引发FormatException if要解析的字符串包含一个小时组件和AM/PM指示符,这些指示符不一致。在.NET Framework 3.5和更早版本中,AM/PM标识符被忽略。(/ quote) – Renan