2013-10-17 10 views
8

DateTime-Stringsの束を取得して、C#DateTimeに解析したい。ISO 8601をC#に解析するDateTime

2009-06-18 02:10:31.296761+00 
2009-06-18 02:13:34.049145+00 
2009-01-06 23:52:21.510121+00 
2009-06-18 02:17:57.268252+00 
2010-01-22 03:31:26.512496+00 
2009-06-18 01:32:37.930961+00 

私は現在、次のコード行でのDateTime - オブジェクトを取得しようとしている:

DateTime.ParseExact(str, "yyyy-MM-dd HH:mm:ss.FFFK", CultureInfo.InvariantCulture, DateTimeStyles.None); 

しかし、私はいつもにSystem.FormatExceptionを取得しています。

+7

これはISO 8601準拠の入力ではありません –

+1

Shawがコメントしたように、[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)の形式ではありません。標準では、スペースではなく中間に「T」が必要です。たとえば、「2009-06-18T02:10:3​​1.296761 + 00」となります。スペースは、データ交換、送信者および受信者の両当事者による特別な手配でのみ、任意に許可されます。 –

答えて

18

あなたは、単純なDateTime.Parse作品、空想何もする必要はありません。

DateTime myDate1 = DateTime.Parse("2009-06-18 02:10:31.296761+00"); 
DateTime myDate2 = DateTime.Parse("2009-06-18 02:10:31.296761+03"); 

両方の線がうまくいくと結果の日付は考慮にオフセットがかかります。

この作品の理由は、あなたが提供形式は特にthe universal sortable format、ないISO 8601

ISO 8601がroundtripフォーマットに対応し、代わりに「」への「T」を使用、標準の日時形式のいずれかであるということです日時とは別に

+0

往復形式( 'O')でISO8601の日付を解析するときにエラーが発生しました。往復形式には、完全指定の日付と時刻が必要です(小数点の秒数を含む)(たとえば、2006-05-04T00:00:00.0000000)。 – redcalx

関連する問題