如何TryParseExact一个只包含24小时的字符串?

Rom*_*kov 5 .net datetime exception

它只是不想工作:

DateTime time;

DateTime.TryParseExact("17", "HH", ..., out time);
  // works fine

DateTime.TryParseExact("9", "HH", ..., out time);
  // works fine, but 9 doesn't match HH (nor should it)

DateTime.TryParseExact("9:", "H':'", ..., out time);
  // works fine

DateTime.TryParseExact("9", "H", ..., out time);
  // exception: "Input string was not in a correct format"
Run Code Online (Sandbox Code Playgroud)

#3工作的事实提供了一个明显的解决方案,但如果我在其他人的代码中看到它,这将使我成为"WTF"的东西之一.是TryParseExact车还是什么?

Joã*_*elo 8

你可以用DateTime.TryParseExact("5", "%H", null, DateTimeStyles.None, out time).

要在没有前导零的24小时时钟中解析小时,可能只想使用"H"格式,但自定义日期和时间格式必须包含两个或更多字符,这将导致"H"被解释为标准日期和时间格式,导致格式异常.

自定义日期和时间格式字符串上的MSDN:

使用任何自定义日期和时间格式说明符作为格式字符串中的唯一说明符(即使用"d","f","F","g","h","H", "K","m","M","s","t","y","z",":"或"/"自定义格式说明符)包括在之前或之后的空格说明符,或在单个自定义日期和时间说明符之前包含百分比("%")格式说明符.

我之前喜欢包含%标志,因为我发现之前或之后的空格可能被解释为打字错误并被其他人删除.