2009-07-16 5 views
8

ログインしたユーザーごとに保存されているCultureInfoを使用するグローバル化されたWebアプリケーションを変更しています。CultureInfo&DateTimeInfo:24時間の確認方法は?

クライアントがローカライズされる時間データ入力をしたいと思います。書式設定が既に利用可能であるため、表示は問題ではありません。しかし、現在のcultureinfoが24時間またはam/pmであるかどうかを検出する必要があるので、正しい入力ボックス(テキストフィールドだけでなく)を表示できます。

私の最初のアイデアは、のCultureInfoのDateTimeInfoプロパティをチェックしてShortTimePatternは資本Hまたは小文字hを含んでいますが、これは私のために十分な堅牢感じなかったかどうかを確認することでした。

良い方法がありますか?私は両方のクラスのプロパティを読んだことがありますが、私が何か不足していない限り、私は既存のメソッドやプロパティを見ることができません。

+0

おかげで@mlessard - エスケープ文字のためにチェックすることをお勧めします。私たちはカスタムカルチャーを使用していないので、おそらくこの段階ではやっていないでしょう。 – toxaq

+0

これは拡張メソッドとしてこの機能を作成するために使用したコードです。 using System; using System.Globalization; 名前空間My.Extensions {パブリック静的クラスCultureInfoExtensions {パブリック静的ブールIs24HourTime(このCultureInfoカルチャ) {戻りculture.DateTimeFormat.ShortTimePattern.Contains( "H")。 } } } – toxaq

答えて

7

私はその情報を取得するためのより良い方法があるとは思いません。文化のための時間パターンは、(ユーザーがさえShortTimePatternが「こんにちは\」でカスタムカルチャを作成することができ、その後DateTime.ToString()任意の時間のために、「ハロー」戻ってくる)何を含めることができます。その場合、フレームワークはCultureInfoが24時間形式であるか12時間形式であるかをフレームワークが判断できますか?

だから、「正常な」DateTimeFormatInfo.ShortTimePatternは必ずしもそうでない時は表示されません、「H」または「H」のいずれかが含まれます。私はあなたの最初のアイデアをフォローしてそのことを確認できると思います。 "h"や "H"が\ "hello"の例で\ hのようにエスケープされていないことを確認することもできます:

5

最も堅牢な方法は、DateTimeFormatInfo.AMDesignatorが空の文字列

if (DateTimeFormatInfo.AMDesignator == "") 
    //24hour format 
else 
    //12hour format 
+0

「DateTimeFormatInfo.CurrentInfo.AMDesignator」ですが、私が必要とするもの – Anytoe

2

'H'/'h'をチェックするのは、AM/PM指定子を確認するよりも堅牢です。 良い例は、en-gbです。 時間フォーマット文字列はHH:mmで、AM/PM指定子はAM/PMに設定されています Windowsは時刻を24時間形式で表示します! これは矛盾した定義だと思われますが、 'H'をチェックするとバグが修正されました。

関連する問題