データベースに日付を挿入しています。値は次のとおりです。
s.theDate = Convert.ToDateTime("06-13-2012");
「文字列は有効な DateTime として認識されませんでした」というエラーが表示されます。これを解決するにはどうすればよいですか?
これを試して:
DateTime.ParseExact("06-13-2012", "MM-dd-yyyy", System.Globalization.CultureInfo.InvariantCulture)
s.theDate = DateTime.ParseExact("06-13-2012", "MM-dd-yyyy", System.Globalization.CultureInfo.InvariantCulture)
ToString
を使用したDateTime
型の動作を見ると、次のようになりInvariantCulture
ます。
new DateTime(2012, 6, 13).ToString(CultureInfo.InvariantCulture)
結果:
06/13/2012 00:00:00
したがって、逆に、インバリアント カルチャを使用した日付の解析は問題なく機能すると想定できます。
Convert.ToDateTime("06-13-2012", CultureInfo.InvariantCulture)
...そしてそうです。
そうは言っても、日付/時刻形式を想定するのは少し危険です。UI を考慮するときは、形式をカルチャ固有にする必要があると思います。それ以外の場合は、形式をカルチャに依存しないようにする必要があります。Microsoft は文化に依存しない形式として MM/dd/yyyy を採用していますが、これはあいまいな形式であり、大規模なシステムを構築したいものではありません。
ISO 8601 と呼ばれるグローバル標準があり、これを使用する必要があります。この標準を使用すると、これが最終的な結果になります。
Convert.ToDateTime("2012-06-03");
ParseExact
すでに提案されているとおりに使用するかConvert.ToDateTime
、2 番目のパラメーターを入力します。
Convert.ToDateTime("06-13-2012", new DateTimeFormatInfo{FullDateTimePattern = "MM-dd-yyyy"});