【发布时间】:2012-09-07 18:27:33
【问题描述】:
在 Windows 中,我可以通过调用 GetTimeZoneInformation 轻松完成 UTC 转换。结果,我返回的结构将有两个不同的偏差值,一个用于标准时间,一个用于 DST,一个BiasCode 表示我们当前处于哪个偏差值。如果我们只关心当前时刻,那很好。
但我有一个 API,用户调用它来检索有关即将发生的事件的数据。数据以当地时间存储在数据库中,并且用户希望它采用 UTC,所以我运行了转换,一切都很好......除了我们将在几周内进行时间更改。如果我根据今天的偏差报告时间变化的另一边的事件,它们将延迟一个小时。
有什么我可以调用的类似于GetTimeZoneInformation 的东西,除了我传递一个日期和时间然后它给我的BiasCode 是那个在那个时候是正确的, 而不是当前的? (是的,我知道规则每年都在变化。我不会寻找超过几周未来的东西。)
【问题讨论】:
-
据我所知,没有 Win32 函数可以完全满足您的要求,但是使用 GetTimeZoneInformation 编写您自己的函数应该不难,使用 GetTimeZoneInformation 来编写当前年份,或 GetTimeZoneInformationForYear 来编写未来年份的日期(Vista 和以上)。
-
请注意,从本地时间到 UTC 时间的转换可能不明确。理想情况下,您应该存储为 UTC 并转换为显示。