2017-04-26 7 views
0

CultureInfoの場合、DateTimeFormat.AbbreviatedMonthNamesを呼び出すと、.['jan.',... 'dis.']など)で終わる配列が返されます。カルチャ月の末尾が簡略化された

これはビルドサーバーではなく、すべての開発者マシンで発生するわけではありません。 CurrentCultureとマシンの場所/言語が設定されているものとは相関関係がないようです。

これを選択するテストはスペイン語の文化のためのもので、スペイン語の場合はCultureInfoを明示的に作成します。だから、私はこの情報がどこかでハードコーディングされていると思っていて、ただ読まれていると思います。 CultureData.AbbreviatedMonthNames(calendarId)からお読みください。

更新: 起動時の現在のカルチャがen-GBである場合、それ以上の調査では期間がありません。それがある場合en-USがあります。明示的にCurrentCultureを設定することは、起動時に異なる場合にのみ有効です。

+1

[こちら](http://stackoverflow.com/q/37354988/579895)があります。私は自分のabbreviatedmonthnamesコレクションを使用しています... – 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")); 
関連する問題