将将来的本地日期时间转换为 UTC



我在将 EWS 约会的开始DateTime从本地时间转换为 UTC 时遇到问题。从 EWS 那里,我得到了约会的DateTimeTimeZone。我一直在使用.ToUniversalTime()DateTime转换为UTC。

但是,当当前时间和约会的开始时间位于夏令时的不同方面(例如,开始DateTime可能是 2018 年 3 月 15 日),则.ToUniversalTime()转换将使用当前的UTC 偏移量,这会导致日期时间相差一小时。

我需要某种方法在未来某个日期获取 UTC 偏移量。

我最好的计划是使用.ToUniversalTime()来获得正确 UTC 开始DateTime的近似值。大多数情况下,这将是正确的 UTC 转换,如果不是,它将接近。从理论上讲,我应该能够在这个估计的 UTC 时间获得预测的 UTC 偏移量,并将原始开始日期时间重新转换为 UTC。

我知道如果开始DateTime发生在夏令时切换后一小时内,这将失败,但这对我来说已经足够接近了。我将不胜感激任何建议或替代方法,但我真正正在寻找的是在未来某个日期获得估计的 UTC 偏移量的某种方法。

几件事:

  • DateTime.ToUniversalTime()只能从系统的本地时区转换。 它不知道约会中的时区。

  • 您不正确地使用它的当前 UTC 偏移量。 它使用在提供的时间生效的偏移量。 同样,它只知道与系统本地时区的偏移量。

    • 请注意,如果您在非常旧的操作系统(Windows XP)上运行,则它只会知道当前规则(对于已更改规则的时区)。 但这一切都在现代Windows中得到了正确的处理。
  • 请考虑使用TimeZoneInfo对象及其ConvertTimeToUtc方法,而不是.ToUniversalTime()。 由于您已经拥有 EWS 的时区,因此这可能是最简单的路线。

  • 唯一涉及的"估计"是您估计时区规则将来不会更改。 这可能会发生,也可能不会发生。 既然我们看不到未来,我们就不可能知道。 您的代码本身不需要做任何估计 - 给定可用的数据,框架提供的函数足够精确。

  • 在StackOverflow上已经有大量关于这个主题的信息。 请在询问之前搜索。 谢谢。

相关内容

  • 没有找到相关文章

最新更新