Обнаружьте переход в или из летнего времени с Delphi - PullRequest
1 голос
/ 21 января 2011

Мне нужно вызвать событие, когда компьютер переходит в летнее время или из него. Я мог отслеживать текущее состояние с помощью GetTimezoneInformation и проверять его каждую секунду, ожидая изменений, но я просто подумал, что может быть более простой способ, который не предусматривает непрерывной проверки.

Ответы [ 3 ]

2 голосов
/ 21 января 2011

Delphi TZDB помогает отслеживать алгоритмы, когда должен был произойти переход.

- Йерун

1 голос
/ 21 января 2011

Согласно этому http://www.pcreview.co.uk/forums/thread-1469513.php Windows не отправляет WM_TIMECHANGE при переходе на летнее время. Обходные пути (я не использовал ни одного из них, поэтому я не уверен, работает ли он):

  • проверять местное время каждые несколько секунд или около того (чёрт)
  • изменить ваши расчеты на основе GMT ​​
  • смотреть HKLM \ System \ CurrentControlSet \ Control \ TimeZoneInformation \ ActiveTimeBias значение с помощью RegNotifyChangeKeyValue () (это значение изменяется, когда есть Переход на летнее время, а также при изменении часового пояса).

С уважением,
Radu

0 голосов
/ 21 января 2011

По крайней мере, в Великобритании (не уверен в других странах) переход происходит только в воскресенье утром, что может помочь сократить частоту ваших проверок до нескольких часов в неделю. Кроме того (опять же для Великобритании) это всегда происходит в последние выходные марта и октября, поэтому вы можете еще больше сократить период, в течение которого вам нужно выполнять проверки.

Если вы можете собрать правила для каждой страны, которая вас интересует, и закодировать их логику, то это, очевидно, будет более эффективным, чем постоянная проверка, но, конечно, вы несете ответственность за правильность, а не за зависимость от ОС.

...