【问题标题】:How to find out if the current local time is in daylight savings如何确定当前本地时间是否为夏令时
【发布时间】:2016-12-23 00:44:46
【问题描述】:

GetTimeZoneInformation 用各种有用的信息填充 TIME_ZONE_INFO 结构。

除了它实际上并没有告诉我当前本地时区是否处于夏令时。

就此而言,我在纽约,StandardBiasDaylightBias 都与 Bias 说同样的话。

发生了什么事?

【问题讨论】:

  • 您可以对照 StandardDate 和 DaylightDate 字段检查当前日期,以判断 TZ 当前是在 StandardDate 还是 Daylight。

标签: c++ winapi timezone dst


【解决方案1】:

GetTimeZoneInformation的返回码包含你想要的信息。

根据 MSDN:

如果函数成功,则返回下列值之一。

TIME_ZONE_ID_UNKNOWN
0
当前时区不使用夏令时,因为没有过渡日期或禁用夏令时自动调整。

TIME_ZONE_ID_STANDARD
1
系统在 TIME_ZONE_INFORMATION 结构的 StandardDate 成员所涵盖的范围内运行。

TIME_ZONE_ID_DAYLIGHT
2
系统在 TIME_ZONE_INFORMATION 结构的 DaylightDate 成员所涵盖的范围内运行。

如果函数因其他原因失败,例如内存不足错误,则返回 TIME_ZONE_ID_INVALID。要获取更多错误信息,请致电GetLastError

请务必检查返回码以确保您收到的信息确实有效。

【讨论】:

  • 是的,我怎么错过了。 :-) 谢谢。虽然我有专家...有什么办法可以从窗户中取出任何类似于奥尔森城市名称的东西?我需要制作一个需要 olsen 城市名称的 libical timezone 对象,但我不知道如何将其从窗口中取出。
  • @stu 这里没有专家。从来不需要这样做,并且快速浏览谷歌挖掘的文献并没有显示任何开箱即用或简单的方法来做到这一点。我也没有在boost::locale 中看到映射,但我可能已经过时了。看来您应该再问一个问题。
  • 谢谢。我已经做了很多寻找。我认为windows不做olsen,它做的事情,可能不足以让我在libical timezone数据库中找到......
猜你喜欢
  • 2012-10-16
  • 2019-08-31
  • 2013-05-25
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 2017-08-29
  • 2011-03-04
相关资源
最近更新 更多