2011-09-04 7 views
7

現在のカルチャー/ロケールがam/pm時間または24時間制を使用するように設定されているかどうかを判断する必要があります。 現在のカルチャー/ロケールで午前/午後または24時間制を使用するかどうかを判断する方法は?

bool time24Hour = Thread.CurrentThread.CurrentCulture.DateTimeFormat.AMDesignator == ""; 
しかし、私は、これは動作しません意味すると思わこのスレッド Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current cultureの最後の答えにコメントをお読みください。

は、最初に私は、私はこれを行うことができると思いました。

私は任意の時間をフォーマットして結果を分析することができますが、確かに単純な方法がありますか?

EDIT:

下記参照も私のコメント - 私はちょうど私が選択しなければならない時間のリストを含む2フォーマット済みの定数文字列のどちらを決定したい、と不要なねじれの多くを避けるために願っています - ちょうどIこれが午前/午後の文化であるか24時間の文化であるかについて、はい/いいえの回答が必要です。

プログラムはWinFormsプログラムです。

+0

なぜあなたにとって重要ですか? –

+1

文化に応じて、「9 10 11 12 13 14 15 16 17」または「9 10 11 12 1 2 3 4 5」のいずれかの時間の事前生成された定数リストを選択する必要があります。私は、DateTimeや書式設定などの多くの曲げを行う必要はないと考えています。 – RenniePet

+0

まず、質問を編集してその情報を含める必要があります。次に、Windowsフォームを使用していますか? Webフォーム? Silverlight? –

答えて

9

DateTimeFormat.ShortTimePatternHが含まれているかどうかを確認してください。そうであれば、システムは24時間制を使用しています

+0

ありがとう、それは適切なアプローチのように見えます。しかし、ちょうど "H"をテストするのはさらに正確ではないでしょうか? (または "HH"ですが、それは冗長でしょう) – RenniePet

+0

もう一つの非常にマイナーな点 - WinFormsを私の質問のタグとして追加したのがわかりますが、私の質問ではなく、 – RenniePet

+0

1)あなたは正しいです、私は私の答えを編集しました2)あなたはあなたがWinformsでそれをやっていると言ったので、私はそれをしました。 SilverlightとWPFでこれを行う方法が異なるかどうかは不明です。 –

2

私は可能であれば少しだけ追加します。 dario_ramosの答えに基づいて、これを私のシステムに渡す(378の文化をチェックする)サポートユニットテストを使った拡張メソッドに変えました。

public static class DateTimeExtensions 
{ 
    public static bool Is24Hrs(this CultureInfo cultureInfo) 
    { 
     return cultureInfo.DateTimeFormat.ShortTimePattern.Contains("H"); 
    } 
} 

[TestClass] 
public class DateTimeExtensionTests 
{ 
    [TestMethod] 
    public void Unit_Can_Determine_If_Culture_Uses_24HrTime() 
    { 
     var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); 
     foreach (var cultureInfo in cultures) 
     { 
      Thread.CurrentThread.CurrentCulture = cultureInfo; 
      var datetime = new DateTime(2000, 1, 1, 23, 0, 0); 
      var formatted = datetime.ToString("t"); 
      var is24Hrs = formatted.Contains("23"); 
      Assert.AreEqual(is24Hrs, cultureInfo.Is24Hrs()); 
     } 
    } 
} 
関連する問題