Shi*_*hti 7 c# datetime parsing datetimeoffset
我在数据库中有一个日期时间,我使用SqlDataReader读取然后将其转换为(DateTime)
.演员之后的Kind
财产是DateTimeKind.Unspecified
.
然后我有另一个字符串,我从其他来源读取.它的格式是这样的2016-01-20T22:20:29.055Z
.我这样做DateTime.Parse("2016-01-20T22:20:29.055Z")
,它的Kind属性是DateTimeKind.Local.
如何正确解析两个日期时间以进行比较?我需要使用DateTimeOffsets吗?我该如何解析它们?
谢谢
因为 SQLReader 无法合理推断 DateTimeKind,所以它保持未指定。您需要使用DateTime.SpecifyKind
将 SQLReader 输出中的 DateTimeKind 更改为适当的值。如果您只处理 UTC 和一个一致的本地时区,这可以正常工作;否则,您确实应该在代码和 SQL 数据库中使用 DateTimeOffset。
字符串“2016-01-20T22:20:29.055Z”符合ISO 8601标准,是一个 UTC 日期;但是,DateTime.Parse
只有 1 个参数可以最终执行到本地时间的转换。根据文档:
通常,Parse 方法返回一个 DateTime 对象,其 Kind 属性为 DateTimeKind.Unspecified。但是,Parse 方法也可能执行时区转换并根据 s 和样式参数的值不同地设置 Kind 属性的值:
另请参阅Derek Fowler 博客中 .NET 和 SQL Server中的UTC 陷阱,以获取有关该主题的更多报道。