1

午前と午後をC#で日時にローカライズしようとしています。

C#の「PMDesignator」と「AMDesignator」によって返される値を使用することはどの程度信頼できますか(以下のコードのように)?

同じコードを使用して、以下の両方のシナリオをどのように処理できますか?

                                                                        //Line# Output
                                                                        //----- ------
void Main()                                                             //1
{                                                                       //2
    DateTime dt = DateTime.Now; // it is 5:56 PM now                    //3 it is 5:56 PM now   
                                                                        //4
    //Japanese                                                          //5
    var JapaneseCulture = new System.Globalization.CultureInfo("ja");   //6 
    Console.WriteLine(JapaneseCulture.DateTimeFormat.PMDesignator);     //7     午後
    Console.WriteLine(JapaneseCulture.DateTimeFormat.AMDesignator);     //8     午前
    Console.WriteLine(dt.ToString("t",JapaneseCulture));                //9     17:56
    Console.WriteLine(dt.ToString("hh:mm tt",JapaneseCulture));         //10    05:56 午後
                                                                        //11
    //German                                                            //12
    var GermanCulture = new System.Globalization.CultureInfo("de");     //13    
    Console.WriteLine(GermanCulture.DateTimeFormat.PMDesignator);       //14    (blank)
    Console.WriteLine(GermanCulture.DateTimeFormat.AMDesignator);       //15    (blank)
    Console.WriteLine(dt.ToString("t",GermanCulture));                  //16    17:56
    Console.WriteLine(dt.ToString("hh:mm tt",GermanCulture));           //17    05:56
}

日本語
-PMDesignator、AMDesignatorには値
がありますが、「t」を使用すると9行目に表示されません。
この場合、10行目で指定された形式( "hh:mm tt")により、より正確な出力が得られます。

ドイツ語
-PMDesignator、AMDesignatorには値がない
ため、16行目のように「t」を使用すると正しい出力が得られますが、
「hh:mmtt」を使用する17行目では誤った出力が得られます。

[編集:コメントを読んだ後:]「t」は「一般的に」使用されるフォーマットをかなり確実に与えますか?(私はローカリゼーションの経験がないので、値がどれほど信頼できるかについてはよくわかりません)

4

1 に答える 1

2

.NETの標準の日付と時刻の書式文字列は、ユーザーのカルチャに対して正しいことを行います。あなたの場合、次を使用してください:

var culture = new CultureInfo("ja");
var dt = DateTime.Now;
Console.WriteLine(dt.ToString("t", culture)); // t => Short Time format.

特定のビジネス要件で本当に必要な場合にのみ、カルチャ固有の形式をカスタマイズでオーバーライドします。

Microsoft は、書式設定、翻訳などがすべての人にとって正しいものであることを保証するために、ローカリゼーションの取り組みに多額の資金を投じています。

于 2012-11-15T04:57:05.023 に答える