現象

Microsoft ASP.NET で Web アプリケーション上やコンソール アプリケーションの複数スレッドで同時に、DateTime.Parse を処理すると、まれに FormatException が発生し以下のエラーメッセージが表示されることがあります。

また、この現象は、コンソールやサービス アプリケーションが複数スレッドで DateTime.Parse を使っている場合にも発生する場合があります。

Exception: System.FormatException はハンドルされませんでした。
Message: "文字列は有効な DateTime ではありませんでした。"
StackTrace:
場所 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)

場所 System.DateTime.Parse(String s)

場所 ... (呼び出し元のコールスタック)

原因

DateTime.Parse 内部関数で利用する DateTimeFormatInfo オブジェクトに .NET Framework 内部処理で不正な値が入力されることにより DateTime.Parse メソッドの変換処理で FormatException が発生します。DateTimeFormatInfo はワーカープロセス起動時に初期化されますが、何らかの理由により初期化が失敗すると、本現象が発生します。

解決方法

Windows Server 2003 環境の場合は、以下の修正プログラムをインストールすることで問題を解決することが可能です。

修正プログラムについては、次のサポート技術情報を参照してください。

注 : この修正プログラムをインストールする際には、Windows Server 2003 SP2 がインストールされている必要があります。

2404988 DateTime.Parse メソッドを処理する時に、System.FormatException エラーが発生する場合がある

回避策

修正プログラムを適用せずに、この問題を回避するには、以下のいずれかの方法を実行してください。

方法 1 : 明示的にカルチャを指定する

文字列から DateTime 構造体へ Parse メソッドを使って変換する際に明示的にスレッドのカルチャを指定して以下のようにコードを記入ください。

DateTime dt = DateTime.Parse("2008/06/11 14:00:28",
 new CultureInfo(Thread.CurrentThread.CurrentCulture.Name));

方法 2 : Application_Start イベントでワーカープロセス起動時にダミーメソッドで DateTimeFormatInfo の内部変数初期化を強制的に行う

Application_Start イベント内部に以下のコードを記入ください。指定する日付の文字列は有効な日付である必要があります。

DateTime dt = DateTime.Parse("2008/06/11 14:00:28");

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

翻訳品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

フィードバックをお送りいただきありがとうございます!

×