2010-08-11 147 views
17

打开一个观察窗口为什么DateTime.ToString(“h”)会导致异常?

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

给出:

new DateTime(2010,01,01).ToString("h")扔类型的异常System.FormatException

然而...

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

给出: “12”

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

+0

这是一种自定义格式,因此您无法在无空间的情况下添加它。 – 2010-08-11 15:00:27

回答

38

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

固定的更好的方法是使用%

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

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

自定义日期和时间格式字符串 由两个或多个字符。 日期和时间格式化方法 将任何单字符串 解释为标准日期和时间格式 字符串。如果他们不识别 字符作为有效的格式说明符,则它们会抛出FormatException。例如,仅包含说明符“h”的 的格式字符串被解释为标准日期和 时间格式字符串,被解释为 。但是,在这个 特定情况下,由于没有“h” 标准日期和时间格式 说明符,因此引发的例外是 。

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

例如,“%H”被解释为 定制的日期和时间的格式字符串 ,其显示由所述 当前日期和时间值表示的小时。您 也可以使用“h”或“h”格式 字符串,但这包括结果字符串中的空格 以及 小时。以下示例 说明了这三种格式的 字符串。

+0

感谢乔恩,我想这会有道理。我只是与: dte.ToString(“h”).Trim() 现在解决问题。 – 2010-08-11 14:59:37

+1

DateTime.Now.ToString(“%h”) - 对我很有用,非常感谢。我应该阅读官方手册,而不是其他网站,我猜! – 2010-08-11 15:02:17

相关问题