According to MSDN,d
格式说明符输出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
说明符会抛出异常?
答案 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,就会抛出一个格式异常。