2

文化を設定するためのこのコードがあります

        public static CultureInfo GetRegionDefaultCulture(int regionId)
        {   
            // removed code to shorten....
            return CultureInfo.CreateSpecificCulture("en-au");

        }

ここで私のテスト例のコードビハインドでそれを使用する

        Thread.CurrentThread.CurrentCulture = 
               CultureHelper.GetRegionDefaultCulture(regionId);

私のテスト例の背後にあるaspxコードでこれを使用する

        DateTime dtNow = DateTime.Now;
        Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt"));

出力

09 Nov 2010 04:42 PM

これらのカルチャのいずれかを使用するようにコードを更新すると、出力で AM/PM も正しく取得されます

en-PH
en-GB
en-US
en-JM

使用するコードを更新すると

en-IE

出力は

09 Nov 2010 04:44 

何か不足していますか?en-IE の動作が異なるのはなぜですか?

@Jordansの回答から得られた回答

このコードを追加するとうまくいきました。

            DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
            info.AMDesignator = "AM";
            info.PMDesignator = "PM"; 
4

3 に答える 3

4

どうやら、「en-IE」のロケール設定はデフォルトで 24 時間制を使用しているため、AM/PM は必要ありません。

于 2010-11-09T05:51:22.133 に答える
2

ドキュメントによると、カルチャで AM/PM が使用されていない場合、 からは何も返されませんtt

AM 指定子を使用しないカルチャの場合、このプロパティは空の文字列を返します。

どのカルチャに AM 指定子があるかについてのドキュメントが見つかりません。カルチャ情報は、ソースが見つからないネイティブ メソッドを介して取得されます。次のコードを使用して、独自のリストを生成できます。

CultureInfo.GetCultures(CultureTypes.AllCultures)
  .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator)));
于 2010-11-09T05:55:56.377 に答える