2013-04-07 39 views
6

Thời gian tiết kiệm ánh sáng ban ngày (Hoa Kỳ) vào năm 2013 bắt đầu lúc 2:00 sáng vào Chủ nhật, ngày 10 tháng 3 năm 2013, và bây giờ là ngày 9 tháng 3 năm 2013 và tôi gọi API sau đây trên bộ hẹn giờ chờ đã tạo:Điều gì sẽ xảy ra khi CreateWaitableTimer được đặt cho ngày/giờ không tồn tại?

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 là thời gian không tồn tại vì thời gian sẽ được điều chỉnh trước một giờ, thay vì 2 giờ sáng sẽ là 3 giờ sáng.

Câu hỏi của tôi, điều gì sẽ xảy ra với bộ hẹn giờ của tôi? (Tôi dường như không tìm thấy tài liệu cho trường hợp này.)

+0

Tại sao không tạo một tình huống như vậy bằng cách đơn giản chuyển tiếp đồng hồ bên trong của bạn trong vài phút? –

+0

+1. Nhưng mọi người không có khuynh hướng dự đoán trước nữa) – SChepurin

+0

Vâng, tôi đang chơi với nó ngay bây giờ nhưng tôi nhận được "hiệu ứng lạ" trong OS và Visual Studio. Tôi nghĩ rằng để tìm một số tài liệu chính thức cho việc này ... – c00000fd

Trả lời

7

tôi nghi ngờ bạn đã biết câu trả lời cho câu hỏi của bạn, bởi vì bình luận của bạn khẳng định một cách rõ ràng:

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

Vì vậy, bạn tôi biết rằng các tài liệu cho SetWaitableTimer() nói:

Hãy chắc chắn để sử dụng thời gian tuyệt đối dựa trên UTC vì hệ thống sử dụng thời gian dựa trên UTC trong nội bộ.

Từ UTC không quan tâm đến DST nào, hẹn giờ của bạn sẽ được kích hoạt trên March 10th, 2013, 3:10 AM, giờ địa phương của bạn.

+0

Hmm. Điểm tốt. Vâng, tôi đã bỏ lỡ phần UTC. Nó có ý nghĩa bây giờ. Cảm ơn bạn đã chỉ ra nó ... – c00000fd

+0

Cân nhắc tất cả những rắc rối liên quan đến thời gian này mà chúng tôi thừa kế, đây vẫn là một câu hỏi rất hay để hỏi. – SChepurin

3

SetWaitableTimer dự kiến ​​pDueTime sẽ được cung cấp bằng UTC; vì vậy không có cách nào để gọi nó với một ngày/thời gian không tồn tại như vậy.