为什么DateTime.ToString(“h”)会导致异常?

时间:2010-08-11 14:55:58

标签: c# datetime

打开观察窗口

new DateTime(2010,01,01).ToString("h")

给予:

  

new DateTime(2010,01,01).ToString("h")抛出了System.FormatException

类型的异常

...然而

new DateTime(2010,01,01).ToString("h ")

给出:“12”

那为什么额外的空间会阻止这种格式异常的发生呢? 这是一个错误吗?

1 个答案:

答案 0 :(得分:43)

这是因为它认为它是standard format string而不是custom one,因为它是一个字符。

更好的解决方法是使用%

string text = DateTime.Now.ToString("%h");

来自自定义格式字符串的文档:

  

自定义日期和时间格式字符串   由两个或多个字符组成。   日期和时间格式化方法   解释任何单字符字符串   作为标准的日期和时间格式   串。如果他们不承认   字符作为有效的格式说明符,   他们抛出FormatException。对于   例如,包含的格式字符串   只有说明符“h”才是   被解释为标准日期和   时间格式字符串。但是,在这   特殊情况,例外是   抛出因为没有“h”   标准日期和时间格式   说明符。

     

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

     

例如,“%h”被解释为a   自定义日期和时间格式字符串   显示由...表示的小时   当前的日期和时间值。您   也可以使用“h”或“h”格式   字符串,虽然这包括一个空格   在结果字符串中   小时。以下示例   说明了这三种格式   字符串。