gpt4 book ai didi

c# 将字符串(不带时区)解析为 DateTime,同时考虑 DST

转载 作者:行者123 更新时间:2023-11-30 13:32:19 24 4
gpt4 key购买 nike

看了很多SO的文章,但是好像没能很好的找到问题的答案。发布的建议包括将日期与字符串相互转换多次的函数,在末尾连接位,这一切看起来……很乱

那么问题来了:

我们的服务器遍布全局。所有服务器都在自己的本地时间运行,并保存包含服务器本地时间条目的日志。有的服务器在夏令时观测区,有的不在

假设我从日志中获得这些字符串:2013-01-01 12:34:56、2013-07-01 12:34:56而且我知道这台服务器在纽约,所以在 DST 运行时它是 UTC-5 或 UTC-4

我在香港服务器上的日志中有相同的字符串,那里不适用 DST,时区是 +8

我所追求的是一段代码,我可以告诉它:

  • 这是一个代表时间的字符串
  • 这是字符串来自的时区
  • 如果相关应适用夏令时

代码会将字符串解析为 DateTimeOffset,如果解析的时间与 DST 相关,则偏移量会根据 DST 进行调整

例如:纽约服务器日志显示“2013-01-01 ...”夏令时适用于一月份的这个日期,因此解析的日期应该是:纽约时间 12:34:56,也就是 UTC 时间 17:34:56(因为它是 -5,没有夏令时)

纽约服务器日志显示“2013-07-01 ...”DST 确实适用于 6 月的这个日期,因此解析的日期应该是:纽约时间 12:34:56,也就是 UTC 的 16:34:56(因为它是 -4,与 DST)

香港服务器,两个日期时间都解析为 04:34:56 UTC

谢谢大家

最佳答案

首先,我强烈建议您更改系统以在任何地方登录 UTC。它会让您的生活变得更加简单。

如果你真的坚持你所拥有的,你应该使用DateTime.TryParseExact DateTimeStyles 仅为 0(默认值)。这将为您提供一个 DateTimeKindUnspecified 的值,这正是您想要的。 (它不是 UTC,也不是进行解析的机器的本地时间。)

然后您可以使用 TimeZoneInfo.GetUtcOffset (具有该日志的正确时区)计算偏移量,并从两者一起创建一个 DateTimeOffset

作为一个完全有偏见的人,你也可以改用 Noda Time我维护的项目,这将使您的代码更容易理解:)

关于c# 将字符串(不带时区)解析为 DateTime,同时考虑 DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736069/

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