将ISO 8601日期时间字符串反序列化为C#日期时间

本文关键字:日期 时间 反序列化 字符串 ISO 8601 | 更新日期: 2023-09-27 18:19:47

我正在尝试使用:

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

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

我做错了什么?

将ISO 8601日期时间字符串反序列化为C#日期时间

如果您正在解析单个值,最简单的方法可能只是使用DateTime.ParseExact:

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

"o"模式是往返模式,设计为ISO-8601:

"O"或"O"标准格式说明符对应于DateTime值的"yyyy'-'MM'-'dd'TT'HH':'m':'ss'.'fffffffK"自定义格式字符串,对应于DateTimeOffset值的"yyyy'-'MM'-'dd'TT'HH':'m]:'ss'.Ffffffzzz"自定义格式串。

我还没有指定格式提供商,因为这无关紧要:

此说明符的模式反映了已定义的标准(ISO 8601)。因此,无论使用的区域性或提供的格式提供程序如何,它始终是相同的。

如果您需要Json.NET在反序列化其他值的同时透明地处理此问题,那么这可能是一个更棘手的命题——其他人可能知道更多。

此外,作为一个插件,您可能希望考虑使用我的Noda Time项目,该项目支持ISO-8601并与JSON.NET集成,尽管目前还没有以预打包的方式集成。