C#では、DateTime形式の文字列を使用して、表示される日付の部分を制御すると同時に、CultureInfoをオーバーライドしません。C#でCultureInfoをオーバーライドしないでDateTimeを書式設定する
System.Globalization.CultureInfo cultureInfoUS = new System.Globalization.CultureInfo("en-US", false);
System.Globalization.CultureInfo cultureInfoGerman = new System.Globalization.CultureInfo("de-DE", false);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfoUS;
DateTime date = DateTime.Parse("03-13-2012 01:30:00 PM");
Console.WriteLine(date.ToString(cultureInfoGerman));
//produces 13.03.2012 13:30:00
Console.WriteLine(date.ToString("MM/dd/yyyy", cultureInfoGerman));
//produces 03.13.2012 but should be 13.03.2012
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfoGerman;
Console.WriteLine(date.ToShortTimeString());
//produces: 13:30
Console.WriteLine(date.ToString("h:mm tt", cultureInfoGerman));
//produces: 1:30 but should be 13:30
Console.WriteLine(date.ToString("h:mm tt", cultureInfoUS));
//produces: 1:30 PM
上記のコードでコメントを見ることができます。出力はCultureInfoによって部分的に調整されますが、完全には調整されません。
また、ToShortDateString
とToShortTimeString
のメソッドはIProvider
を使用しないため、現在のスレッドのカルチャ情報に依存する必要があります。これは上の最初の例で説明されています。現在の文化を変え、ToShortDateString
に電話して元の文化に戻すことを期待していますか?
を私は「/」になっていることを非常に理由で変更を期待「」 DE時間は1ではなく13であり、AM/PMは落とされる。グローバリゼーションの懸念が基本的な短い日時に限られている限り、私はそれについて心配する必要はないと思う。答えは、フォーマット文字列が部分的にオーバーライドされ、CultureInfoによって部分的にオーバーライドされているようです。 – jedatu