解析自定义日期时间格式

13

我需要从带有 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.

我对这里出了什么问题感到困惑。我做错了什么?

注意:不用担心时区问题,我稍后会处理正确的时区。


1
在第一个代码示例中,x 是 20130722033523,而不是 20130722153523。 - empi
1个回答

25

问题在于您指定的日期时间格式使用 hh 表示 12 小时制,但输入字符串在该位置上是 15,超出了预期范围,因此无法解析。

请尝试改用 HH 表示 24 小时制:

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

进一步阅读:


3
直接从MSDN获取:如果格式是不包括日期或时间分隔符的自定义格式模式(例如“yyyyMMdd HHmm”),则对于提供程序参数使用不变的文化,并使用每个自定义格式说明符的最宽形式。例如,如果您想在格式模式中指定小时数,请使用更宽的形式“HH”,而不是较窄的形式“H”。 - Karl Anderson
3
+1. 还要检查这个链接:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx -(引用)调用者注意事项: 在.NET Framework 4中,如果待解析的字符串含有小时部分和未匹配的AM/PM指示符,则ParseExact方法会抛出一个FormatException异常。而在.NET Framework 3.5及之前的版本中,AM/PM指示符会被忽略。 - Geeky Guy
有没有想法让它理解"12-Sep-2015 08:12:54 UTC"的结尾部分或者其他时区的时间? - Bitterblue

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