Что происходит, когда CreateWaitableTimer установлен для несуществующей даты / времени?

Переход на летнее время (США) в 2013 году начался в 2:00 утра в воскресенье, 10 марта. Итак, скажем, сейчас 9 марта 2013 года, и я вызываю следующий API для уже созданного дескриптора ожидаемого таймера:

FILETIME ftWhen = //Points as absolute time to March 10th, 2013, at 2:10 AM
SetWaitableTimer(hTimer, ftWhen, 0, NULL, NULL, TRUE);

March 10th, 2013, 2:10 AM это несуществующее время, потому что время будет скорректировано на один час вперед, поэтому вместо 2:00 будет 3:00.

Итак, мой вопрос, что будет с моим таймером? (Я не могу найти документацию по этому делу.)

2 ответа

Решение

Я подозреваю, что вы уже знаете ответ на свой вопрос, потому что в вашем комментарии прямо говорится:

// Points _as absolute time_ to March 10th, 2013, at 2:10 AM

Итак, вы знаете, что документация для SetWaitableTimer() гласит:

Обязательно используйте абсолютное время в формате UTC, поскольку система использует внутреннее время в формате UTC.

Так как UTC не заботится о летнем времени, ваш таймер сработает March 10th, 2013, 3:10 AM, ваше местное время.

SetWaitableTimer ожидает pDueTime быть предоставленным в UTC; так что нет способа назвать это с такой несуществующей датой / временем.

Другие вопросы по тегам