解析自定义日期时间格式

Tim*_*lds 8 .net c# datetime parsing

我必须DateTimeyyyyMMddhhmmss格式解析字符串中的对象.

如果我运行此代码,它可以正常工作:

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

但是,如果我运行此代码 - 看似相反的操作 - 我得到一个例外:

string x = "20130722153523";
DateTime y = DateTime.ParseExact(x, "yyyyMMddhhmmss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

例外是:

System.FormatException: String was not recognized as a valid DateTime.
Run Code Online (Sandbox Code Playgroud)

我很难过这里有什么不对劲.我究竟做错了什么?

注意:不要担心时区.我可以稍后处理获得正确的时区.

p.s*_*w.g 20

问题是您指定的日期时间格式使用hh12小时时间格式,但输入字符串15在该区域中.它无法解析这个因为15超出预期范围.

请尝试使用HH24小时时间格式:

string x = "20130722153523";
DateTime y = DateTime.ParseExact(x, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

进一步阅读:

  • 直接来自MSDN:如果format是不包含日期或时间分隔符的自定义格式模式(例如"yyyyMMdd HHmm"),请使用provider参数的不变区域性和每个自定义格式说明符的最宽格式.例如,如果要在格式模式中指定小时数,请指定更宽的形式"HH",而不是更窄的形式"H". (3认同)
  • +1.另请检查:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx - (quote)**调用者注释**:在.NET Framework 4中,如果ParseExact方法抛出FormatException,则抛出一个FormatException要解析的字符串包含一个小时组件和一个不一致的AM/PM指示符.在.NET Framework 3.5和更早版本中,忽略AM/PM指示符.(/ quote) (3认同)