Tôi đang gặp phải sự cố kỳ lạ khi đồng hồ hệ thống của tôi biết rằng đó là thời gian tiết kiệm ánh sáng ban ngày, nhưng glibc có vẻ như không. Đây là một bản cài đặt Ubuntu cập nhật, và tôi đã kiểm tra/etc/localtime và nó có thời gian chuyển đổi chính xác cho chuyển đổi của tuần trước thành DST.Tại sao glibc "múi giờ" toàn cầu không đồng ý với thời gian hệ thống trên DST?
Múi giờ chính xác hiện tại của tôi là Giờ ban ngày Thái Bình Dương (UTC-7). Khi tôi hỏi hệ thống của tôi những gì múi giờ tôi đang ở, nó nói với tôi một cách chính xác:
$ date +%z
-0700
Nhưng khi tôi chạy chương trình sau:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
Kết quả là, không đúng cách:
28800
Tương ứng với UTC-8 hoặc Giờ chuẩn Thái Bình Dương. (Và không, TZ không được đặt trong môi trường của tôi)
Tôi nghĩ glibc và chương trình ngày sẽ nhận được thông tin múi giờ của họ từ cùng một nguồn, nhưng dường như họ không hoặc tôi hiểu sai múi giờ glibc công trình toàn cầu.
Các câu hỏi cơ bản là sau đó:
- Tại sao hai đầu ra những khác nhau
- Làm thế nào tôi có thể chắc chắn phát hiện UTC hệ thống bù đắp từ một chương trình C?
Việc đọc manpage của tôi cho tzset chỉ ra rằng biến dayllight chỉ biểu thị nếu vùng cục bộ sử dụng tiết kiệm ánh sáng ban ngày tại một thời điểm nào đó và không nhất thiết cho biết liệu nó có hiệu lực hay không. –
Tôi nghĩ rằng tôi đồng ý với bạn. Tôi muốn đề xuất {time_t t = time (NULL); printf ("% d \ n", (int) difftime (mktime (gmtime (& t)), t)); } nhưng điều đó mang lại cho tôi kết quả tương tự như "múi giờ". –