我試圖使用方法:反序列化的ISO 8601日期時間字符串轉換爲C#的DateTime
JsonConvert.DeserializeObject<DateTime>("2009-02-15T00:00:00Z", new IsoDateTimeConverter())
但它給了我一個FormatException: Input string was not in a correct format.
我在做什麼錯?
我試圖使用方法:反序列化的ISO 8601日期時間字符串轉換爲C#的DateTime
JsonConvert.DeserializeObject<DateTime>("2009-02-15T00:00:00Z", new IsoDateTimeConverter())
但它給了我一個FormatException: Input string was not in a correct format.
我在做什麼錯?
如果你解析單個值,最簡單的方法可能是隻使用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集成 - 儘管尚未採用預先打包的方式。
我將如何使用野田時間來進行ISO-8601轉換? –
@DavidPfeffer:在Noda Time 1.2中,您可以使用'OffsetDateTimePattern.GeneralIsoPattern'解析爲'OffsetDateTime'。或者,如果它總是獲得一個'Z'而不是一個不同的偏移量,則可以使用'InstantPattern.GeneralPattern'。 –
需要嵌入引號。 「\」 2009-02-15T00:00:00Z \ 「」。謝謝,橡皮鴨! –
德克,你救了我的命! – Raymond
哈哈。懷疑它,但很高興我本來可以幫忙:) –