我试图使用方法:反序列化的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
哈哈。怀疑它,但很高兴我本来可以帮忙:) –