文化缩写的月份名称有时以

时间:2017-04-26 11:31:45

标签: c# cultureinfo culture

对于CultureInfo,调用DateTimeFormat.AbbreviatedMonthNames会返回一个数组,其中每个月以.结尾,例如['jan.',... 'dis.']

这不会发生在构建服务器上,也不会发生在所有开发人员计算机上,只有一些。似乎与CurrentCulture和机器位置/语言设置的内容无关。

选择此项的测试适用于西班牙文化,包括为西班牙语明确创建CultureInfo。因此,我认为这些信息在某处被硬编码,只是被读出来,据我所知。正在阅读CultureData.AbbreviatedMonthNames(calendarId)

更新: 经过进一步调查,似乎如果启动时的当前文化是en-GB那么就没有时期。如果它是en-US则有。明确设置CurrentCulture没有任何效果,只要它在启动时有所不同。

1 个答案:

答案 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"));