gpt4 book ai didi

c# - 使用正确的时区和类型解析日期时间 c#

转载 作者:太空狗 更新时间:2023-10-29 20:23:31 25 4
gpt4 key购买 nike

我在数据库中有一个日期时间,我使用 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 个参数可以最终执行到本地时间的转换。根据文档:

Generally, the Parse method returns a DateTime object whose Kindproperty is DateTimeKind.Unspecified. However, the Parse method mayalso perform time zone conversion and set the value of the Kindproperty differently, depending on the values of the s and stylesparameters:

  • 如果s包含时区信息,则转换日期时间到本地时区的时间,Kind 是 DateTimeKind.Local。
  • 如果 s 包含时区信息,而 styles 包含AdjustToUniversalflag,日期时间转换为Coordinated世界标准时间 (UTC),类型为 DateTimeKind.Utc。
  • 如果 s 包含 Z 或 GMT 时区指示符,并且样式包括RoundtripKind 标志,日期和时间被解释为 UTC 和种类是 DateTimeKind.Utc。

另见 UTC gotchas in .NET and SQL Server在 Derek Fowler 的博客中获取有关该主题的更多报道。

关于c# - 使用正确的时区和类型解析日期时间 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34911921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com