1

当 PC 进入或退出夏令时时,我需要触发一个事件。我可以使用 GetTimezoneInformation 监视当前状态并每隔一秒检查一次以等待更改,但我只是认为可能有一种更简单的方法不涉及连续检查。

4

3 回答 3

2

Delphi TZDB帮助您跟踪算法何时应该发生转换。

——杰伦

于 2011-01-21T13:26:29.927 回答
1

根据这个 http://www.pcreview.co.uk/forums/thread-1469513.php 窗口不会在夏令时事件上发送 WM_TIMECHANGE。解决方法(我没有使用它们中的任何一个,所以我不确定它是否有效):

  • 每隔几秒左右检查一次当地时间(呸)
  • 将您的计算更改为基于 GMT
  • 使用 RegNotifyChangeKeyValue() 观察 HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias 值(当有 DST 转换以及时区更改时,此值会更改)。

最好的问候,
拉杜

于 2011-01-21T09:03:54.310 回答
-1

至少对于英国(不确定其他国家/地区)而言,过渡只发生在周日早上,这样可以帮助您将检查频率减少到每周仅几个小时。此外(再次对于英国),这总是发生在 3 月和 10 月的最后一个周末,因此您可以进一步减少您需要执行检查的时间段。

如果您可以收集您感兴趣的每个国家/地区的规则并对其逻辑进行编码,那么这显然比连续检查更有效,但当然您有责任保持正确而不是依赖操作系统。

于 2011-01-21T09:09:41.247 回答