2013-06-25 90 views
5

我試圖使用方法:反序列化的ISO 8601日期時間字符串轉換爲C#的DateTime

JsonConvert.DeserializeObject<DateTime>("2009-02-15T00:00:00Z", new IsoDateTimeConverter()) 

但它給了我一個FormatException: Input string was not in a correct format.

我在做什麼錯?

+0

需要嵌入引號。 「\」 2009-02-15T00:00:00Z \ 「」。謝謝,橡皮鴨! –

+0

德克,你救了我的命! – Raymond

+0

哈哈。懷疑它,但很高興我本來可以幫忙:) –

回答

4

如果你解析單個值,最簡單的方法可能是隻使用DateTime.ParseExact

DateTime value = DateTime.ParseExact(text, "o", null); 

的「O」模式是round-trip pattern,它被設計爲ISO-8601:

「O」或「o」標準格式說明符對應於「yyyy' - 'MM' - 'dd'T'HH':'mm':'ss'。'fffffffK」DateTime的自定義格式字符串值和「yyyy」 - 'MM' - 'dd'T'HH':'mm':'ss'。'fffffffzzz'用於DateTimeOffset值的自定義格式字符串。

我沒有指定格式提供,因爲它並不重要:

此說明符的模式反映了一個定義的標準(ISO 8601)。因此,無論使用何種文化或提供格式提供者,它總是一樣的。

如果您需要Json.NET在反序列化其他值時對其進行透明處理,這可能是一個棘手的問題 - 其他人可能知道更多。

此外,就像一個插件一樣,您可能希望考慮使用我的Noda Time項目,該項目支持ISO-8601並與JSON.NET集成 - 儘管尚未採用預先打包的方式。

+0

我將如何使用野田時間來進行ISO-8601轉換? –

+0

@DavidPfeffer:在Noda Time 1.2中,您可以使用'OffsetDateTimePattern.GeneralIsoPattern'解析爲'OffsetDateTime'。或者,如果它總是獲得一個'Z'而不是一個不同的偏移量,則可以使用'InstantPattern.GeneralPattern'。 –

相關問題