в стандарте

я странная проблема, когда мои системные часы знают, что это летнее время, а 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 системы из программы на Си?

Ответы на вопрос(4)

Ваш ответ на вопрос