2013-06-25 58 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'。 –

相关问题