我有一个简单的程序,它将返回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."
为什么会这样?
答案 0 :(得分:4)
由于M
format specifier含义是从1
到12
的单位数月份数,而g
specifier表示A.D.
由于其他字符未引用任何格式说明符,因此它们反映到输出完全它们是什么。
顺便说一下,你的代码似乎有点复杂和错误。首先,使用ShortMonthFormat
和ToShortDateString
生成格式,然后使用 格式化字符串生成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
。