web-dev-qa-db-ja.com

DateTime.ParseExactが文字列を与えると、有効なDateTimeとして認識されませんでした。

日付文字列をDateTime変数に解析しようとしています。 ParseExactがそれを行う方法であることがわかりましたが、これを実行するとエラーが発生します。

文字列は有効なDateTimeとして認識されませんでした。

_string timeFormat = "dd-MM-yyyy hh:mm:ss";
DateTime startDate = DateTime.ParseExact(reader["startdate"].ToString(), timeFormat, CultureInfo.InvariantCulture);
DateTime nextDate = DateTime.ParseExact(reader["nextdate"].ToString(), timeFormat, null);
_

私はnull(たまたま別のページで機能します)と_CultureInfo.InvariantCulture_の両方を試しました。

reader["startdate"].ToString()出力:01-08-2012 15:39:09

そして

reader["nextdate"].ToString()出力:01-08-2012 15:39:09

うまくいくと思いますが、うまくいきません。

誰かが何が悪いのか考えていますか? :)

20
DesignMonkeyDK

書式文字列でhhを使用しています。これは12時間の「時間」フィールドです。値15は範囲外です...

代わりに、24時間指定子であるHHが必要です。

詳細については、 MSDNカスタム日付および時刻フォーマット文字列のドキュメント を参照してください。

46
Jon Skeet

ほとんどの場合、サーバーロケールとUIロケールの違いが原因です。

簡単な方法の1つは、web.configでグローバリゼーションの詳細を指定することです。

お気に入り

<configuration>
   <system.web>
      <globalization culture="en-GB"/>
   </system.web>
</configuration>

またはさらに詳しく

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB" />

しかし、これがアプリケーション全体と衝突しないことを確認してください

1
Anoop Aravind

これが役立つかどうかはわかりませんが、この記事の正確なコードを使用しましたが、DateTime.ParseExact(dat、 "dd/MM/yyy HH:MM"、CultureInfo.InvariantCulture、System.Globalization.DateTimeStyles。なし)私にとってはうまくいきませんでした。

これを読んで、オンラインで投稿しました: http://rochcass.wordpress.com/2012/08/27/error-string-was-not-recognized-as-a-valid-datetime-solution/#more -35

0
Rochelle Cassar

これを試してみてください

DateTime.ParseExact("01-08-2012 15:36:25", "dd-MM-yyyy HH:mm:ss", null);
0