代码之家  ›  专栏  ›  技术社区  ›  Martin Capodici

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

  •  20
  • Martin Capodici  · 技术社区  · 14 年前

    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 回复  |  直到 8 年前
        1
  •  45
  •   Jon Skeet    14 年前

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

    %

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

    由两个或多个字符组成。 解释任何单个字符串 作为标准日期和时间格式 字符作为有效的格式说明符, 例如,格式字符串 只有说明符“h”是 解释为标准日期和 特殊情况下,例外情况是 因为没有“h”而抛出 说明符。

    格式说明符作为唯一的 格式字符串中的说明符(即, 使用“d”、“f”、“f”、“g”、“h”, “H”,“K”,“m”,“m”,“s”,“t”,“y”, 在说明符之前或之后,或 日期和时间说明符。

    例如,“%h”被解释为 自定义日期和时间格式字符串 也可以使用“h”或“h”格式 字符串,尽管其中包含空格 一小时。下面的例子