6

2013 年的夏令时(美国)从 3 月 10 日星期日凌晨 2:00 开始。比如说,现在是 2013 年 3 月 9 日,我在已经创建的可等待计时器句柄上调用以下 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 点,而是凌晨 3 点。

所以我的问题是,我的计时器会发生什么?(我似乎找不到这个案例的文档。)

4

2 回答 2

7

我怀疑您已经知道问题的答案,因为您的评论明确指出:

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

所以你知道SetWaitableTimer()的文档说:

请务必使用基于 UTC 的绝对时间,因为系统内部使用基于 UTC 的时间。

由于 UTC 根本不关心 DST,因此您的计时器将在您March 10th, 2013, 3:10 AM本地时间触发。

于 2013-04-07T09:30:06.560 回答
3

SetWaitableTimer期望pDueTime以 UTC 给出;所以没有办法用这样一个不存在的日期/时间来调用它。

于 2013-04-07T09:29:55.970 回答