1

在 Windows 中,我可以通过调用GetTimeZoneInformation. 结果我得到的结构将有两个不同的偏差值,一个代表标准时间,一个代表 DST,一个BiasCode代表我们当前处于哪个偏差值。如果我们只关心当前时刻,那很好。

但是我有一个 API,用户调用它来检索有关即将发生的事件的数据。数据以本地时间存储在数据库中,用户希望它采用 UTC,所以我运行转换,一切都很好……除了我们将在几周内进行时间更改。如果我根据今天的偏差报告时间变化的另一边的事件,它们将延迟一个小时。

有什么我可以调用的东西GetTimeZoneInformation,除了我传递一个日期和时间然后BiasCode它给我的是那个时候正确的那个,而不是当前的那个?(是的,我知道规则每年都在变化。我不是在寻找任何看起来超过未来几周的东西。)

4

1 回答 1

2

SystemTimeToTzSpecificLocalTime- 让我引用 MSDN -

将协调世界时 (UTC) 中的时间转换为指定时区的对应本地时间。

您可以提供过去和未来的输入 UTC 时间,并在考虑特定时间 DST 设置的所有详细信息的情况下进行本地时间转换。

TzSpecificLocalTimeToSystemTime是进行反向转换的孪生函数。

对我来说更重要的问题是,即使是同一地区,DST 设置也会不时变化,而且每年的转换可能不同(当然,这主要影响过去的事件,而不是未来的事件)。我假设这个 API 也会处理这个问题,跟踪 DST 规则随时间变化的历史。

UPD。这个假设是正确的,MSDN 提到:

  • 时区对旧年份和新年份使用不同的 UTC 偏移量。
  • 要转换的 UTC 时间和计算的本地时间是不同年份的。
于 2012-09-07T21:42:36.540 回答