11

ログインしているユーザーごとに格納された CultureInfo を使用するグローバル化された Web アプリケーションを変更しています。

クライアントは、時間データ入力をローカライズしたいと考えています。フォーマットはすでに利用可能であるため、表示は問題ありません。ただし、正しい入力ボックス (テキストフィールドだけでなく) を表示できるように、現在の cultureinfo が 24 時間制か午前/午後かを検出する必要があります。

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

より良い方法はありますか?両方のクラス プロパティを読みましたが、何かが欠けていない限り、既存のメソッドやプロパティは表示されません。

4

3 に答える 3

7

その情報を取得するためのより良い方法はないと思います。カルチャの時間パターンには何でも含めることができます (ユーザーは、ShortTimePattern が "\hello" であるカスタム カルチャを作成し、DateTime.ToString()いつでも "hello" を返すことができます)。その場合、フレームワークは、その CultureInfo が 24 時間形式か 12 時間形式かをどのように判断できますか?

したがって、「通常」DateTimeFormatInfo.ShortTimePatternには必ず「h」または「H」が含まれます。そうでない場合、時間は表示されません。最初のアイデアに従って、それを確認できると思います。「h」または「H」が「\hello」の例のように \ でエスケープされていないことも確認できます。これは時間を表していないためです:)

于 2009-07-16T02:36:33.393 に答える
6

「H」/「h」のチェックは、AM/PM 指定子のチェックよりも堅牢に見えます。良い例は en-gb です: 時間形式文字列は HH:mm で、AM/PM 指定子は AM/PM に設定されています。 Windows は 24 時間形式で時間を表示します! これは一貫性のない定義のようですが、「H」をチェックするとバグが修正されました。

于 2015-12-25T00:53:20.603 に答える
4

最も確実な方法は、DateTimeFormatInfo.AMDesignatorが空の文字列かどうかを確認することです。

if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "")
  //24hour format
else
  //12hour format
于 2015-02-24T14:16:36.603 に答える