在日期时间格式中获取无效的月份名称
本文关键字:无效 获取 日期 时间 格式 | 更新日期: 2023-09-27 18:32:10
我有一个简单的程序,它将返回日期和短期日期。例如,如果输入为 2016 年 3 月 27 日,则输出将为"星期日, 03/27/2016"
string ShortMonthFormat = "ddd";
DateTime dtc = Convert.ToDateTime("2016-03-27 12:26:41.210");
string result = dtc.ToString(string.Format("{0}, {1}", ShortMonthFormat, dtc.ToShortDateString()));
Console.WriteLine(result);
Console.ReadLine();
此代码适用于当前系统日期格式,即MM/dd/yyyy
(03/27/2016)。但是,如果系统的日期格式更改为 dd-MMM-yy
(27-Mar-16),则代码将返回以下输出"Sun, 27-3ar-16"
月(3 月)返回为 "3ar"
(8月)变为"AuA.D."
为什么会这样?
因为M
格式说明符的含义是从1
到12
的个位数月份数,g
说明符表示时期或时代,例如A.D.
由于其他字符不引用任何格式说明符,因此它们准确地反映到输出中。
顺便说一下,你的代码似乎有点复杂和错误。首先,使用 ShortMonthFormat
和 ToShortDateString
生成格式,然后使用该格式化字符串生成DateTime
的字符串表示形式。
这就是为什么你的代码看起来像;
string result = dtc.ToString("ddd, 27-Mar-16");
这没有太多意义。
您可以修复代码以使用CurrentCulture
的ShortDatePattern
属性,而不是使用类似dtc.ToShortDateString()
;
string result = dtc.ToString(string.Format("{0}, {1}",
ShortMonthFormat,
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));
顺便说一下,基于变量名(ShortMonthFormat
),ddd
说明符用于缩写日期名称。如果要获取缩写的月份名称,可以改用MMM
说明符。
string ShortMonthFormat = "MMM";
您的代码中似乎有一个错误。您正在尝试获取短日期格式,但不是获取格式,而是格式化日期,这将导致格式化日期而不是格式。您可以在代码中解决此问题:
string format = string.Format(
"{0}, {1}",
ShortMonthFormat,
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
);
string result = dtc.ToString(format);
您尚未指定CultureInfo
因此使用CultureInfo.CurrentCulture
反映在CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
中。如果要使用其他CultureInfo
则还必须在 dtc.ToString(format, cultureInfo)
.
解释修复的另一种方法是您必须将dtc.ToShortDateString()
替换为 CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
.