在DateTime格式中获取无效的月份名称

时间:2016-01-27 12:40:35

标签: c# datetime

我有一个简单的程序,它将返回Day和ShortDate。例如,如果输入是2016年3月27日,则输出将为“Sun,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(2016年3月27日)。但是,如果系统的日期格式更改为dd-MMM-yy(27-Mar-16),则代码将返回以下输出"Sun, 27-3ar-16"

3月(3月)以"3ar"

的形式返回

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

为什么会这样?

2 个答案:

答案 0 :(得分:4)

由于M format specifier含义是从112的单位数月份数,而g specifier表示A.D.

等期间或时代

由于其他字符未引用任何格式说明符,因此它们反映到输出完全它们是什么。

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

这就是你的代码看起来像的原因;

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

您可以修改代码以使用CurrentCulture的{​​{3}}代替使用dtc.ToShortDateString()之类的代码;

string result = dtc.ToString(string.Format("{0}, {1}", 
                             ShortMonthFormat, 
                             CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));

顺便说一下,基于变量名称(ShortMonthFormat),ShortDatePattern property用于缩写日期名称。如果您想获得缩写的月份名称,可以使用ddd specifier代替。

string ShortMonthFormat = "MMM";

答案 1 :(得分:1)

您的代码中似乎有错误。您正在尝试获取短日期格式,但不是获取格式化日期,这将导致格式化日期而不是格式。您可以在代码中解决此问题:

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替换为String