在Windows中,我可以通过调用GetTimeZoneInformation
轻松地进行UTC转换。结果我得到的结构将有两个不同的偏差值,一个用于标准时间,一个用于DST,一个BiasCode
表示我们当前在哪个。如果我们只关心当前时刻那就没关系。
但我有一个用户调用的API来检索有关即将发生的事件的数据。数据以当地时间存储在数据库中,用户希望以UTC格式存储,因此我运行转换,一切都很好......除了我们在几周内即将发生时间变化。如果我在时间的另一边报告事件的变化与今天的偏见,它们将会被关闭一小时。
我有什么可以调用的内容,例如GetTimeZoneInformation
,除了我传递日期和时间,然后它给我的BiasCode
是将在那个时候,而不是现在的那个? (是的,我知道规则每年都会发生变化。我不会在未来几周内寻找任何东西。)
答案 0 :(得分:2)
SystemTimeToTzSpecificLocalTime
- 让我引用MSDN -
将协调世界时(UTC)的时间转换为指定的时间 时区对应的当地时间。
您可以提供过去和未来的输入UTC时间并获取本地时间转换,并考虑该特定时刻有关DST设置的所有详细信息。
TzSpecificLocalTimeToSystemTime
是进行逆转换的双重功能。
对我来说更重要的问题是,即使是同一地区,DST设置也会不时变化,每年的转换可能会有所不同(这当然主要影响过去的事件,而不是将来)。我假设此API也会处理此问题,跟踪DST规则随时间变化的历史记录。
UPD。这个假设是正确的,MSDN提到:
- 时区对新旧年份使用不同的UTC偏移量。
- 要转换的UTC时间和计算的当地时间是不同的年份。