2009-10-08 8 views
5

私は文字列が "2009-10-08 08:22:02Z"で、これはISO 8601フォーマットです。.NETでDateTimeにISO 8601文字列を解析していますか?

DateTimeを使用してこの形式を解析するにはどうすればよいですか?

+4

ISO 8601では、タイムゾーンのオフセットを指定することもできます(たとえば、「2009-10-08T12:52:02 + 04:30」は上記と同じです)。しかし、答えのどれもこれを扱っていません... –

答えて

4

いいえ、ISO 8601ではありません。Valid ISO 8601の表現には、時刻と日付の間にTが含まれています。

DateTimeは、有効なISO 8601フォーマットをネイティブに処理できます。ただし、この特定の表現に固執している場合は、DateTime.ParseExactを試して、フォーマット文字列を指定することができます。

+3

wersのウィキが両方の形式を表示 – Kaya

+2

"u"または "s"のいずれかを使用して文字列を解析できませんでしたが、Tをスペースに置き換えるのは簡単です。これはうまくいくようです。私は.NET 2.0でVB.NETを使用しています。 –

+0

@romkyns答えは正しいようです。 "ISO-8601標準"の文書から、3.4.3と4.3.2の章で、日付と時刻が表示されているときに "T"が必要であることを読みました。例B.1.3も参照してください。問題の提示された形式の日付は、ネイティブに処理されます。 – StefanG

19
string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, "u", System.Globalization.CultureInfo.InvariantCulture); 

DateTimeクラスは、このフォーマット私は(Tセパレーター付き)ISO形式で考える

、 "S" の代わりに "U" を使用するためのuのstandard format stringをサポートしています。または、両方の形式をサポートするには、

string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, new string[] {"s", "u"}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

を使用します。

関連する問題