使用 WINAPI 检索日期时间区域设置偏移量
Retrieve DateTime locale offset using WINAPI
Windows API 提供 Time Functions。但是,考虑到夏令时,我找不到给本地 DateTime 检索它与 UTC 的偏移量的方法。
例如:2015 年 1 月 1 日(巴西利亚时间)处于夏令时,因此 UTC 的偏移量不是 -03:00,而是 -02:00。
现在,今天(2015 年 8 月 2 日)我们不在夏令时,所以偏移量又是 -03:00。
是否有功能(或者可能是另一种方法)来检测它?
您可以这样做的一种方法是为此使用 TzSpecificLocalTimeToSystemTime
函数,因为它考虑了夏令时。
为所讨论的两个日期的午夜创建两个 SYSTEMTIME
结构,将它们都转换为 UTC,然后比较生成的 UTC 时间。
对于每个给定的年份,使用 GetTimeZoneInformationForYear
并捕获标准日期和夏令时的开始。如果标准日期大于1月1日,为了解决问题,将前几天视为夏令时。
使用成员 Bias 和 DayLightBias 来检测偏移量以及您必须在日光期间减去多少。
给一个日期,检测日期的范围:
Case 匹配日光周期,结果是原始偏差 - DayLightBias(以分钟为单位)。
否则结果是偏差(以分钟为单位)。
Windows API 提供 Time Functions。但是,考虑到夏令时,我找不到给本地 DateTime 检索它与 UTC 的偏移量的方法。
例如:2015 年 1 月 1 日(巴西利亚时间)处于夏令时,因此 UTC 的偏移量不是 -03:00,而是 -02:00。
现在,今天(2015 年 8 月 2 日)我们不在夏令时,所以偏移量又是 -03:00。
是否有功能(或者可能是另一种方法)来检测它?
您可以这样做的一种方法是为此使用 TzSpecificLocalTimeToSystemTime
函数,因为它考虑了夏令时。
为所讨论的两个日期的午夜创建两个 SYSTEMTIME
结构,将它们都转换为 UTC,然后比较生成的 UTC 时间。
对于每个给定的年份,使用 GetTimeZoneInformationForYear
并捕获标准日期和夏令时的开始。如果标准日期大于1月1日,为了解决问题,将前几天视为夏令时。
使用成员 Bias 和 DayLightBias 来检测偏移量以及您必须在日光期间减去多少。
给一个日期,检测日期的范围:
Case 匹配日光周期,结果是原始偏差 - DayLightBias(以分钟为单位)。
否则结果是偏差(以分钟为单位)。