DateTime.ToString可以为相同的格式说明符返回不同的结果

Kir*_*ill 2 c# datetime

我在DateTime格式字符串中遇到'd'说明符问题.MSDN :

"d"自定义格式说明符将月中的日期表示为1到31之间的数字.单位数字的日期格式不带前导零.

如果我将此格式说明符与格式字符串中的其他符号一起使用,结果将是正确的:

DateTime date1 = new DateTime(2008, 1, 2, 6, 30, 15);
Console.WriteLine(date1.ToString("d ")); //with space after 'd'
//displays: 2 
Run Code Online (Sandbox Code Playgroud)

但如果我从这个样本中删除空间

Console.WriteLine(date1.ToString("d"));
Run Code Online (Sandbox Code Playgroud)

结果变成了 "1/2/2008".

为什么结果字符串取决于格式字符串长度 我怎么能避免这种情况?

Son*_*nül 7

因为作为单个字符,它的行为"d"标准格式说明它返回ShortDatePattern的的CurrentCulture(看起来是M/d/yyyy为您的设置),但与空间,它的行为"d"自定义格式说明返回天数没有前导零的单个数字天.

"d"自定义格式说明

如果"d"没有其他自定义格式说明使用格式说明,它被解释为"d"标准日期和时间格式 说明符.有关使用单个格式说明符的详细信息,请参阅本主题后面的使用单个自定义格式说明符.

并使用单一自定义格式说明符

自定义日期和时间格式字符串由两个或多个字符组成.日期和时间格式化方法将任何单字符字符串解释为标准日期和时间格式字符串.如果他们不将该字符识别为有效的格式说明符,则会抛出一个FormatException.例如,仅由说明符"h"组成的格式字符串被解释为标准日期和时间格式字符串.但是,在这种特殊情况下,抛出异常,因为没有"h"标准日期和时间格式说明符.

使用任何自定义日期和时间格式说明符作为格式字符串中的唯一说明符(即使用"d","f","F","g","h","H", "K","m","M","s","t","y","z",":"或"/"自定义格式说明符)包括在之前或之后的空格说明符,或在单个自定义日期和时间说明符之前包含百分比("%")格式说明符.