0

ユーザーがフランス語でコンテンツを表示している場合、カルチャを次のように設定します。

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");

そして、英語では次のように設定します:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");

現在、日付は en-CA 形式で保存されているため、常に次を使用して明示的にフォーマットします。

var dateFormatPattern = "M/d/yyyy"; // "MM/dd/yyyy"

var dt = DateTime.MinValue;
if (DateTime.TryParseExact(dateString, dateFormatPattern, null, System.Globalization.DateTimeStyles.None, out dtResult))
{
    dt = dtResult;
}

現在は英語で動作しますが、フランス語モードでは解析が失敗します。

デバッグ モードでは、dateString の値がフランス語と英語の両方で同じであることがわかりますが、IDE が形式を変更している可能性がありますか? 文字列値なので、できないと思います。

では、なぜ失敗するのでしょうか。

4

1 に答える 1

2

フランス文化の日付区切り記号はダッシュです。フォーマット文字列を に渡す場合、フォーマット文字列TryParseExactのスラッシュは、入力日付の日付区切り文字と一致する必要があります。

これは、形式とフランス文化を使用して解析する場合、解析を成功させるためにM/d/yyyy形式を含む文字列を提供する必要があることを意味します。M-d-yyyy英語文化の日付区切り文字はスラッシュなので、問題はありません。

正しい修正は、入力がどこから来て、どれだけ寛容になりたいかによって異なります (たとえば、ユーザーがフランス語のコンテンツを表示していて、スラッシュでフォーマットされた日付を提供した場合はどうなるでしょうか?)。

于 2013-02-13T22:36:11.110 に答える