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

时间:2011-12-30 19:07:55

标签: .net exception datetime

它只是不想工作:

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"

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

2 个答案:

答案 0 :(得分:8)

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

要在不带前导零的24小时制中解析小时,可能只想使用"H"格式,但custom date and time format必须包含两个或更多字符,这会导致"H"被解释为standard date and time format,导致格式异常。

来自MSDN on Custom Date and Time Format Strings

  

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

之前我更喜欢包含%符号,因为我发现之前或之后的空格可能被解释为输入错误并被其他人删除。

答案 1 :(得分:0)

如何使用它:

DateTime dt;
DateTime.TryParseExact("09", "HH", null, 
    System.Globalization.DateTimeStyles.None, out dt);