在日期时间格式中获取无效的月份名称

本文关键字:无效 获取 日期 时间 格式 | 更新日期: 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

月(3 月)返回为 "3ar"

8月

(8月)变为"AuA.D."

为什么会这样?

在日期时间格式中获取无效的月份名称

因为M格式说明符的含义是从112的个位数月份数,g说明符表示时期或时代,例如A.D.

由于其他字符不引用任何格式说明符,因此它们准确地反映到输出中。

顺便说一下,你的代码似乎有点复杂和错误。首先,使用 ShortMonthFormatToShortDateString 生成格式,然后使用该格式化字符串生成DateTime的字符串表示形式。

这就是为什么你的代码看起来像;

string result = dtc.ToString("ddd, 27-Mar-16");

这没有太多意义。

您可以修复代码以使用CurrentCultureShortDatePattern属性,而不是使用类似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 .