为什么这两种日期格式不同?

时间:2008-10-03 01:40:23

标签: c# .net datetime formatting

我正在尝试仅在WPF文本块中生成日期编号,没有前导零并且没有额外的空间填充(这会抛弃布局)。第一个产生带有空格的日期编号,第二个产生整个日期。根据{{​​3}},'d'应该产生一天(1-31)。

string.Format("{0:d }", DateTime.Today);
string.Format("{0:d}", DateTime.Today);

更新:添加%确实是诀窍。适当的文档docs

3 个答案:

答案 0 :(得分:5)

请参阅here

  

d,%d

     

该月的某一天。单位数天没有前导零。如果格式模式未与其他格式模式组合,则应用程序指定“%d”。

否则d被解释为:

  

d - 'ShortDatePattern'

PS。对于搞乱格式字符串,使用LinqPad是非常宝贵的。

答案 1 :(得分:1)

从“自定义日期和时间格式字符串”的MSDN文档:

  

任何非标准日期的字符串   和时间格式字符串被解释   作为自定义日期和时间格式   字符串。

{0:d}被解释为标准数据和时间格式字符串。从“标准日期和时间格式字符串”,“d”格式说明符:

  

表示自定义日期和时间   格式字符串由当前定义   ShortDatePattern属性。

对于空格,{0:d}与任何标准日期和时间格式字符串都不匹配,并被解释为自定义数据和时间格式字符串。从“自定义日期和时间格式字符串”,“d”格式说明符:

  

表示当月的日期   数字从1到31。

答案 2 :(得分:0)

{0:d}格式使用Standard Date and Time Format Strings document of MSDN中定义的模式。 'd'转换为短日期模式,'D'转换为长日期模式,依此类推。

您想要的格式似乎是Custom Date and Time Format Modifiers,当没有匹配的指定格式(例如,'d'包含空格)或使用ToString()时,它可以正常工作。

您可以改用以下代码:

string.Format("{0}", DateTime.Today.ToString("d ", CultureInfo.InvariantCulture));