【问题标题】:Retrieve DateTime locale offset using WINAPI使用 WINAPI 检索 DateTime 区域设置偏移量
【发布时间】:2015-10-24 10:45:28
【问题描述】:

Windows API 提供Time Functions。但是,考虑到夏令时,我找不到给本地 DateTime 检索它与 UTC 的偏移量的方法。

例如:2015 年 1 月 1 日(巴西利亚时间)是夏令时,因此偏移量是 -02:00,而不是从 UTC 开始的 -03:00。
现在,今天(2015 年 8 月 2 日)我们不是夏令时,所以偏移量又是 -03:00。

有没有一种功能(或者可能是另一种方式)来检测它?

【问题讨论】:

  • 我找到了一种方法,但有点偏离,从本地日期中减去 UTC 日期并捕捉差异,但我想知道是否有更好的方法

标签: windows datetime winapi timezone locale


【解决方案1】:

您可以这样做的一种方法是为此使用TzSpecificLocalTimeToSystemTime 函数,因为这考虑了夏令时。

为两个相关日期的午夜创建两个 SYSTEMTIME 结构,将它们都转换为 UTC,然后比较生成的 UTC 时间。

【讨论】:

  • 我想我理解你的回答,但我想知道你是否理解我的问题。问题是,给定一个日期,捕获它与 UTC 的偏移量。我的例子是关于白天的,而不是我想比较的日期。减去日期可以解决问题,但看起来很恶心
  • 转换为 UTC 允许您使用简单的减法计算偏移量。对我来说,这似乎并不讨厌。
  • 在我看来这是一个不必要的操作,windows 可能有办法做到这一点,而不需要这个数学,它应该发布这个函数。
  • 什么样的程序员害怕数学? :)
  • 不要误会我的意思。我喜欢它。但是,我认为在这种情况下是不必要的。无论如何,可能没有其他方法
【解决方案2】:

对于每个给定的年份,使用GetTimeZoneInformationForYear 并捕获标准日期和白天日期的开始。如果标准日期大于 1 月 1 日,则为了解决问题,将前几天视为夏令时。
使用成员 Bias 和 DayLightBias 来检测偏移量以及在日光期间您必须减去多少。
给一个日期,检测日期的范围:
大小写匹配日光时段,结果是原始偏差 - DayLightBias(以分钟为单位)。
否则结果为偏差(以分钟为单位)。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2012-07-30
    • 2011-04-01
    • 2021-12-11
    • 1970-01-01
    • 2015-01-04
    • 2020-03-09
    • 2011-07-29
    • 2019-01-07
    相关资源
    最近更新 更多