DateTime.TryParseExact未按预期工作

时间:2010-10-04 09:03:20

标签: c#

为什么这不起作用?

DateTime.TryParseExact(text, "H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value);

我想解析一个仅提供小时部分的Time值,但它会抛出FormatException。

另一方面,这有效:

DateTime.TryParseExact(text, "HH", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value)

有人知道原因吗?

感谢。

4 个答案:

答案 0 :(得分:6)

好的,我不得不看一下这个 - 它似乎应该可以工作,但它不会因为自定义格式字符串无效。自定义格式字符串必须至少包含两个字符 - 请参阅:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#UsingSingleSpecifiers

因此,根据文档,您可以使用以下代码解决此问题:

DateTime.TryParseExact(text, "%H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value);

答案 1 :(得分:0)

我想这意味着TryParseExact无法将小时部分放入单个字符中,这对我来说是可以理解的,因为小时将基于12或24小时。

答案 2 :(得分:0)

如果没有更具体的信息,您正在构建的DatTime无法在给定输入的情况下确定AM / PM。 H只允许1到12的值,留下歧义。 HH提供了额外的信息。

答案 3 :(得分:0)

传递给DateTime.TryParseExact的格式说明符需要与要解析的字符串完全匹配。

E.g。以“H”格式传递“15:20”将失败,因为字符串中还有其他内容。

解析整个字符串并使用DateTime.Hour来获取小时,或者创建一个仅包含小时部分的字符串并使用Int32.Parse