在.NET中发出字符串格式为“M”的DateTime.ToString

我有DateTime的字符串格式的问题。 我认为这是MS中的错误。 你能解释一下,有什么不对吗?

class Program { static void Main(string[] args) { Console.WriteLine(DateTime.Now.ToString("M"));//return 07 July <---- WRONG, SEE MSDN Console.WriteLine(DateTime.Now.ToString(".M"));//return .7 <---- GOOD Console.ReadKey(); } } 

MSDN

来自"M"自定义格式说明符

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

从使用单个自定义格式说明符

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

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

这就是为什么你可以使用其中之一;

 Console.WriteLine(DateTime.Now.ToString(" M")); // 7 Console.WriteLine(DateTime.Now.ToString("M ")); //7 Console.WriteLine(DateTime.Now.ToString("%M")); //7