格式化TimeSpan时没有前导零的天数格式异常

时间:2013-08-15 16:33:21

标签: c# string-formatting

According to MSDNd格式说明符输出TimeSpan.Days属性。在.ToString()方法中使用时,这似乎是正确的:

TimeSpan.FromDays(1).ToString("%d")

但是,在String.Format中使用时,说明符会抛出异常:

String.Format("{0:d}", TimeSpan.FromDays(1))

'String.Format("{0:d}", TimeSpan.FromDays(1))' threw an exception of type 'System.FormatException'
    base {System.SystemException}: {"Input string was not in a correct format."}

dd说明符工作得很好,但是给出了一个前导零(按预期)。

为什么d说明符会抛出异常?

3 个答案:

答案 0 :(得分:3)

您错过了%

string.Format("{0:%d}", TimeSpan.FromDays(1))

根据您链接的文章(以及您复制的示例):

  

如果单独使用“d”自定义格式说明符,请指定“%d”,以使其不会被误解为标准格式字符串。

答案 1 :(得分:1)

典型的,我刚问了这个问题然后我找到答案here - 显然这适用于DateTime和TimeSpan(可能还有其他所有格式)

答案 2 :(得分:0)

我最喜欢的String.Format网站是Stevex

您应该注意的一行是在Numbers

  

说明符|输入|格式|输出(通过双1.42)|输出(通过Int -12400)
  d |十进制(整数)| {0:d} | System.FormatException | -12400

TimeSpan.FromDays(1)返回一个双精度数。 d格式化程序需要一个整数,因为它接收一个double,就会抛出一个格式异常。