У меня странная проблема, когда мои системные часы знают, что это летнее время, а glibc - нет. Это современная установка Ubuntu, и я проверил / etc / localtime, и она имеет правильное время переключения для перехода на DST на прошлой неделе.
Текущий правильный часовой пояс для меня - Тихоокеанское летнее время (UTC-7). Когда я спрашиваю мою систему, в каком часовом поясе я нахожусь, она правильно говорит:
$ date +%z
-0700
Но когда я запускаю следующую программу:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
Вывод неверный:
28800
Что соответствует UTC-8 или тихоокеанскому стандартному времени. (И нет, TZ не установлен в моей среде)
Я думал, что glibc и программа date получат информацию о часовом поясе из одного и того же источника, но, очевидно, либо нет, либо я неправильно понимаю, как работает глобальный часовой пояс glibc.
Основные вопросы:
- Почему эти два выхода отличаются
- Как надежно определить смещение UTC системы из программы на C?