2017-04-26 84 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"));