0

カレンダー コントロールから日付を取得している asp.net ページに 2 つのテキスト ボックスがあります。

カレンダーの選択で、選択した have の値を隠し変数に割り当てています。以下はコードです:

DateTime dtOne;
            dtOne = Convert.ToDateTime(hdnOne.Value.Trim().ToString());
            DateTime dtTwo = Convert.ToDateTime(hdnTwo.Value.Trim().ToString());

ブレークポイントを保持すると、dtOne のこの値を取得します

2011/09/2 02:03...

事前にデプロイされたサイトでは問題なく動作していますが、デプロイされた同じコードをコピーして本番環境に貼り付けると、以下のエラーが発生します。

System.FormatException: String was not recognized as a valid DateTime.

なぜそれが起こったのか、それを解決する方法はありますか?

4

4 に答える 4

4

サーバーのカルチャ設定は、開発マシンのカルチャ設定とは異なる可能性があります。この場合、DateSeperator が原因だと思います。

両方の環境で hdnOne.Value.Trim().ToString() の値を比較しましたか?

于 2011-03-19T17:55:02.173 に答える
3

はい - これは地域設定の問題です。基本的に、Convert.ToDateTime で使用している書式文字列は、運用サーバーから返された日時を解析できません。そのため、実稼働サーバーの地域設定を変更するか、これが好ましくない (そしてそうである可能性がある) 場合は、メソッド パラメーターで適切な IFormatProvider パラメーターを使用して、返された文字列が実際にどの日時形式であるかを説明し、解析できるようにします。

情報はこちら: http://msdn.microsoft.com/en-us/library/system.convert.todatetime.aspx

于 2011-03-19T18:01:36.100 に答える
0

テキストボックスが読み取り専用モードの場合、テキストボックスから値を取得すると空白になります。convert の代わりに datetime.tryparse も使用します

于 2011-03-19T18:06:08.480 に答える
0

特にカルチャ/ロケールに関して、本番環境とテスト環境に違いはありますか? - おそらく、JavaScript カレンダー コントロールとコードの解析の両方で使用されるカルチャを明示的に一致させてみてください。

この例外はすべてのコンテンツでスローされていますか? それともユーザーコンテンツだけですか?TextBox を使用している場合、これは一部のユーザー (または一部のロケールのユーザー) が予期しないコンテンツを入力した可能性があります。

この現在の修正に関係なく、実際のユーザーが Web ページを手に入れたら、実行時にこのエラーを予期する必要があります。したがって、FormatException を処理するか、TryParse を使用してください。

于 2011-03-19T17:56:03.347 に答える