对于CultureInfo
,调用DateTimeFormat.AbbreviatedMonthNames
会返回一个数组,其中每个月以.
结尾,例如['jan.',... 'dis.']
。
这不会发生在构建服务器上,也不会发生在所有开发人员计算机上,只有一些。似乎与CurrentCulture
和机器位置/语言设置的内容无关。
选择此项的测试适用于西班牙文化,包括为西班牙语明确创建CultureInfo
。因此,我认为这些信息在某处被硬编码,只是被读出来,据我所知。正在阅读CultureData.AbbreviatedMonthNames(calendarId)
。
更新:
经过进一步调查,似乎如果启动时的当前文化是en-GB
那么就没有时期。如果它是en-US
则有。明确设置CurrentCulture
没有任何效果,只要它在启动时有所不同。
答案 0 :(得分:3)
您可以使用自己的AbbreviatedMonthNames
集合,因此总会有相同的内容,如下所示:
CultureInfo ci = CultureInfo.CreateSpecificCulture("en-US");
DateTimeFormatInfo dtfi = ci.DateTimeFormat;
dtfi.AbbreviatedMonthNames = new string[] { "Jan.", "Feb.", "Mar.",
"Apr.", "May.", "Jun.",
"Jul.", "Aug.", "Sep.",
"Oct.", "Nov.", "Dec.", "" };
dtfi.AbbreviatedMonthGenitiveNames = dtfi.AbbreviatedMonthNames;
然后你可以像这样使用它:
Console.WriteLine(DateTime.Now.ToString("dd MMM yyyy", dtfi));
或者在当前主题中更改它:
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine(DateTime.Now.ToString("dd MMM yyyy"));