日付形式記述子のローカライズ
-
08-06-2019 - |
質問
日付形式記述子をローカライズする最善の方法は何ですか?
mm/dd/yyyy 形式を使用しない文化の人なら誰でも知っているように、この形式で日付を入力しなければならないのは面倒です。.NET フレームワークは非常に優れたローカリゼーション サポートを提供しているため、ユーザーの文化に応じて日付を解析するのは簡単ですが、必要な形式に関する役立つヒントも表示したいことがよくあります (特に、yy と yyyy を区別するため)。ほとんどの文化)。
ほとんどのユーザーにとって意味のある方法でこれを行うための最良の方法は何ですか (例:dd/M/yyy は、大文字と小文字が変わり、1 文字と 2 文字が切り替わるため、混乱を招きます。
解決 3
これが私の現在の方法です。助言がありますか?
Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)");
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)");
CultureInfo currentCulture = CultureInfo.CurrentUICulture;
// If the culture is netural there is no date pattern to use, so use the default.
if (currentCulture.IsNeutralCulture)
{
currentCulture = CultureInfo.InvariantCulture;
}
// Massage the format into a more general user friendly form.
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower();
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm");
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd");
他のヒント
ISO-8601を使用してください. 。それは国際標準です。
Date and time (current at page generation) expressed according to ISO 8601:
Date: 2014-07-05
Combined date and time in UTC: 2014-07-05T04:00:25+00:00
2014-07-05T04:00:25Z
Week: 2014-W27
Date with week number: 2014-W27-6
Ordinal date: 2014-186
OP の「間違った」日付は私の DD/MM/YYYY の生い立ちと非常に矛盾しており、ISO 8601 の日付と時刻は非常に扱いやすいことに同意します。この規格が初めて正しくなり、 エンジニアリング ローカリゼーションを必要としない明白な答えがあります。
スタック オーバーフローに関する誕生日入力フォームは、世界の大多数にとって非常に迷惑なことなので、バグとして報告するつもりでした。
国際標準の問題は、ほとんど誰もそれを使用していないことです。できる限り努力していますが、実生活ではほとんどどこでも dd/mm/yyyy を使用することを余儀なくされています。つまり、ISO-8601 を使用することに常に意識的に慣れているということです。ISO-8601 を使おうともしない大多数の人にとって、事態はさらに悪いことです。できるところは国際化できれば、それは大きなアドバンテージになると思います。
形式 (mm/dd/yyyy または dd/mm/yyyy) を指定し、その後にユーザーの文化における今日の日付を出力するのはどうでしょうか。MSDN に次の記事があります 個人の文化に合わせて DateTime をフォーマットする, 、これを行うのに役立つ可能性のある CultureInfo オブジェクトを使用します。(ほとんどの人がよく知っている) 形式と、その形式で表される現在の日付の組み合わせは、日付を入力する方法について十分な手がかりになります。(まだ理解できない人のために、カレンダー コントロールも含めてください)。
短い形式は便利で、スペルミスを避けるのに役立ちます。必要に応じてローカライズしますが、必ず期待どおりの形式で表示してください (ユーザーが盲目のままにならないようにしてください)。日付ピッカー コントロールを オプション フィールドの記入を補助します。
さらに、オンザフライで解析して日付を長い形式で表示することも役立つかもしれません。
最良の選択肢:代わりに、標準の日付ピッカーを使用することをお勧めします。
代替:編集コントロールの内容が変更されるたびに、それを解析して日付の長い形式を (別のコントロールに?) 表示します (例:入力「03/04/09」表示「あなたの入力:2009 年 3 月 4 日」)