Как мне найти текущий часовой пояс системы? - PullRequest
23 голосов
/ 25 июня 2010

В Linux мне нужно найти текущий настроенный часовой пояс как местоположение Олсона. Я хочу, чтобы мой код (C или C ++) был переносим на максимально возможное количество систем Linux.

Например. Я живу в Лондоне, поэтому мое нынешнее местоположение Олсона - "Европа / Лондон". Я не заинтересован в идентификаторах часовых поясов, таких как "BST", "EST" и т. Д.

У Debian и Ubuntu есть файл /etc/timezone, который содержит эту информацию, но я не думаю, что я могу полагаться на то, что этот файл всегда будет там, могу ли я? В Gnome есть функция oobs_time_config_get_timezone(), которая также возвращает правильную строку, но я хочу, чтобы мой код работал в системах без Gnome.

Итак, каков наилучший общий способ получения текущего настроенного часового пояса как местоположения Олсона в Linux?

Ответы [ 12 ]

0 голосов
/ 25 июня 2010

В Linux мне нужно найти текущий часовой пояс в качестве местоположения Олсона. Я хочу, чтобы мой код (C или C ++) был переносим на максимально возможное количество систем Linux.

Если вы хотите быть переносимым, то используйте только GMT для внутреннего использования. Из-за многопользовательского наследия системные часы * NIX обычно находятся в Гринвиче, а общесистемный часовой пояс отсутствует - потому что разные пользователи, подключенные к системе, могут жить в разных часовых поясах.

Часовой пояс пользователя отражается в переменной среды TZ, и вам может понадобиться использовать ее только при преобразовании внутренней даты / времени в читаемую пользователем форму. В противном случае localtime() позаботится об этом автоматически.

0 голосов
/ 25 июня 2010

Согласно этой странице выглядит, как если бы вы #include <time.h> заявили следующее:

void tzset (void);
extern char *tzname[2];
extern long timezone;
extern int daylight;

Предоставляет ли это вам необходимую информацию?

...