2012-03-13 4 views
1

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によって部分的に調整されますが、完全には調整されません。

また、ToShortDateStringToShortTimeStringのメソッドはIProviderを使用しないため、現在のスレッドのカルチャ情報に依存する必要があります。これは上の最初の例で説明されています。現在の文化を変え、ToShortDateStringに電話して元の文化に戻すことを期待していますか?

答えて

0

あなたのコードのコメントを理解できません - あなたが使用しているカスタム日付/時刻フォーマット指定子は、私が期待する通りに正確に動作します。なぜあなたは "MM/dd/yyyy"が一番最初に来ると思いますか?

特定のカルチャで使用されているパターンに基づいてカスタムフォーマットを作成する場合は、DateTimeFormatInfo.ShortDatePattern,DateTimeFormatInfo.ShortTimePatternなどを参照して作成できます。たとえば、曜日と曜日のカスタムフォーマットが必要な場合は、カルチャ固有の短い時間、あなたが使用できます。

string format = "dddd " + culture.DateTimeFormat.ShortTimePattern; 
Console.WriteLine(DateTime.Now.ToString(format, culture); 

あなたは、現在のカルチャを変更ToShortDateStringを呼び出した後、元の文化にスレッドを元に戻す必要があります期待ですか?

いいえ、あなたは現在のカルチャ以外の何かしたい場合standard date/time format stringを使用する必要があります。

date.ToString("d", culture); // short date 
date.ToString("t", culture); // short time 
+1

を私は「/」になっていることを非常に理由で変更を期待「」 DE時間は1ではなく13であり、AM/PMは落とされる。グローバリゼーションの懸念が基本的な短い日時に限られている限り、私はそれについて心配する必要はないと思う。答えは、フォーマット文字列が部分的にオーバーライドされ、CultureInfoによって部分的にオーバーライドされているようです。 – jedatu