2017-04-26 74 views
0

对于CultureInfo,调用DateTimeFormat.AbbreviatedMonthNames会返回一个数组,其中每个月以.结尾,例如['jan.',... 'dis.']文化缩写月份名称有时以句点结尾

这不会在构建服务器上,而不是对所有开发商的机器出现任何,只是一些。似乎是什么CurrentCulture和机器位置/语言设置为无相关性。

说,选中这些测试是西班牙文化,包括明确创建西班牙语CultureInfo。所以,我本来以为该信息是硬编码的地方,是刚刚被读出,而据我可以告诉它。正在从CultureData.AbbreviatedMonthNames(calendarId)阅读。

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

+1

还有一个类似的问题[here](http://stackoverflow.com/q/37354988/579895)。我会做的是使用我自己的abbreviatedmonthnamename集合... – Pikoh

回答

2

您可以使用自己的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"));