DotNet DateTime.ToString 奇怪的结果

4

为什么:

DateTime.Now.ToString("M")

不返回月份数字?相反,它会返回带有日期的完整月份名称。

显然,这是因为“M”也是MonthDayPattern的标准代码。我不想要这个...我想使用“M”获取月份数字。有没有办法关闭这个?

6个回答

9
根据MSDN的说法,您可以使用"%M""M "" M"(注意:后两者也会在结果中包含空格)来强制解析M作为月份格式的数字。

不错,但如果您有一个带有简短描述键和格式值的“字典”,或者从数据库字段中获取它,那么在五月份使用"%MM"可能会返回55而不是05。编辑:@Guffa的答案是在“''M”之前放置空字符串-更好地覆盖它。 - oCcSking

8
这里发生的是标准DateTime格式字符串和自定义格式说明符之间的冲突。 “M”值含糊不清,因为它既是标准格式说明符又是自定义格式说明符。在冲突的情况下,DateTime实现将选择标准格式化程序而不是客户格式化程序,因此在这里获胜。
消除歧义的最简单方法是在M前面添加%字符。这个字符是一种表达以下内容应被解释为自定义格式化程序的方式。
DateTime.Now.ToString("%M");

+1 感谢您解释问题并提供解决方法。 - Odrade

5

为什么不使用DateTime.Now.Month呢?


可能需要一个通用的解决方案,如具有描述和格式的字典。 - oCcSking

4
你也可以使用 System.DateTime.Now.Month.ToString(); 来实现同样的功能。

2

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

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

10倍的最佳1(对我来说=) - oCcSking

0
值得一提的是,使用DateTime.ToString(string)方法时,对于任何单个字符格式字符串,都需要使用%前缀,即使该字符串不表示内置格式字符串模式之一;当我尝试检索当前小时数时,遇到了这个问题。例如,以下代码片段:
DateTime.Now.ToString("h")

会抛出一个FormatException异常。将上述内容更改为:

DateTime.Now.ToString("%h")

返回当前日期的小时。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接