DotNet DateTime.ToString奇怪的结果

时间:2009-12-15 16:53:31

标签: c# vb.net datetime

为什么:

DateTime.Now.ToString("M")

不退还月份号码?相反,它返回完整的月份名称及其上的日期。

显然,这是因为“M”也是MonthDayPattern的标准代码。我不想要这个......我想用“M”来获取月号。有没有办法解决这个问题?

6 个答案:

答案 0 :(得分:9)

According to MSDN,您可以使用"%M""M "" M"注意:最后两个也会包含空格结果)强制M被解析为月份格式的数量。

答案 1 :(得分:8)

这里发生的是标准DateTime格式字符串和自定义格式说明符之间的冲突。值“M”是不明确的,因为它既是标准格式说明符又是自定义格式说明符。 DateTime实现将在冲突的情况下针对客户格式化程序选择标准格式化程序,因此它在此获胜。

消除歧义的最简单方法是在M前面添加%char。此char表示以下内容应解释为自定义格式化程序

DateTime.Now.ToString("%M");

答案 2 :(得分:5)

为什么不使用 DateTime.Now.Month

答案 3 :(得分:4)

您也可以使用System.DateTime.Now.Month.ToString();来完成同样的事情

答案 4 :(得分:2)

您可以在格式中放置一个空字符串文字,使其成为复合格式:

DateTime.Now.ToString("''M")

答案 5 :(得分:0)

值得一提的是,使用DateTime.ToString(string)方法时,任何单字符格式字符串都需要%前缀,即使该字符串不代表其中一种内置格式字符串模式;我在尝试检索当前小时时遇到了这个问题。例如,代码段:

DateTime.Now.ToString("h")

将抛出FormatException。将上述内容更改为:

DateTime.Now.ToString("%h")

给出当前日期的小时。

我只能假设该方法正在查看格式字符串的长度并确定它是否代表内置或自定义格式字符串。