为什么这不起作用?
DateTime.TryParseExact(text, "H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value);
我想解析一个仅提供小时部分的Time值,但它会抛出FormatException。
另一方面,这有效:
DateTime.TryParseExact(text, "HH", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value)
有人知道原因吗?
感谢。
答案 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
。