【问题标题】:Is there any way to get a UTC time conversion for a future point?有什么方法可以为将来的时间点转换 UTC 时间?
【发布时间】:2012-09-07 18:27:33
【问题描述】:

在 Windows 中,我可以通过调用 GetTimeZoneInformation 轻松完成 UTC 转换。结果,我返回的结构将有两个不同的偏差值,一个用于标准时间,一个用于 DST,一个BiasCode 表示我们当前处于哪个偏差值。如果我们只关心当前时刻,那很好。

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

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

【问题讨论】:

  • 据我所知,没有 Win32 函数可以完全满足您的要求,但是使用 GetTimeZoneInformation 编写您自己的函数应该不难,使用 GetTimeZoneInformation 来编写当前年份,或 GetTimeZoneInformationForYear 来编写未来年份的日期(Vista 和以上)。
  • 请注意,从本地时间到 UTC 时间的转换可能不明确。理想情况下,您应该存储为 UTC 并转换为显示。

标签: windows winapi


【解决方案1】:

SystemTimeToTzSpecificLocalTime - 让我引用 MSDN -

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

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

TzSpecificLocalTimeToSystemTime 是一个做反向转换的孪生函数。

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

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

  • 时区对旧年份和新年份使用不同的 UTC 偏移量。
  • 要转换的UTC时间和计算出来的本地时间是不同年份的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2017-04-27
    • 2018-07-27
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多