c# 中 "M" 自定义格式说明符的奇怪行为

Strange behaviour of the "M" custom format specifier in c#

此代码在每个 Console.WriteLine 语句下方的注释中生成输出。

谁能解释一下这种行为?

DateTime date1 = new DateTime(2008, 8, 18);
Console.WriteLine(date1.ToString("M"));
// Displays August 18

Console.WriteLine(date1.ToString("M "));
// Displays 8

Console.WriteLine(date1.ToString("(M)"));
// Displays (8)

Console.WriteLine(date1.ToString("(M) MMM, MMMM"));
// Displays (8) Aug, August

Can anyone explain this kind of behaviour?

是的,在 standard date and time format strings and custom date and time format strings 中有完整的记录。

让我们逐一浏览:

  • date1.ToString("M"):使用单个字符 'M',因此它是“month/day 模式”的标准格式字符串
  • date1.ToString("M "):使用两个字符的格式字符串,因此它是使用 M 的自定义格式字符串,它是月份编号,1-12 没有填充。
  • date1.ToString("(M)"):同样,使用 M
  • 的自定义格式字符串
  • date1.ToString("(M) MMM, MMMM"):使用 M 的自定义格式字符串,以及 MMM(“月份的缩写名称”)和 MMMM(“全名月份”)

前两者之间的重要区别在于格式字符串 只有 如果它是单个字符,则被视为标准格式。否则,它被认为是自定义格式。如果你想单独使用 single-character 自定义格式说明符,你可以使用 % 作为前导字符 - 所以 date1.ToString("%M") 会 return “8”而不是“August 18".

C# 中的日期和时间由 C# 中的 DateTime 结构处理,该结构提供属性和方法以将日期格式化为不同的日期时间格式。

M-> Month number(eg.3)

MM-> Month number with leading zero(eg.04)

MMM-> Abbreviated Month Name (e.g. Dec)

MMMM-> Full month name (e.g. December)

https://www.c-sharpcorner.com/blogs/date-and-time-format-in-c-sharp-programming1