TZSET(3)

НАЗВАНИЕ
tzset, tzname, timezone, daylight - инициализирует информацию о преобразованиях времени

СИНТАКСИС
#include <time.h>

void tzset (void);

extern char *tzname[2]
extern char *tzname[2];
extern long timezone;
extern int daylight;

ОПИСАНИЕ
Функция tzset() инициализирует переменную tzname из переменной окружения TZ и автоматически вызывается другими функциями, изменяющими время и зависящими от временной зоны. В системах, совместимых с SysV, она также устанавливает переменные timezone (секунды западнее GMT) и daylight (если временная зона не использует переход на "летнее" время, то 0, в противном случае ненулевое значение).

Если переменной TZ не существует в окружении, то переменная tzname инициализируется как наиболее приближенная к местному времени, что определено в файле формата tzfile(5) localtime . Данный файл находится в каталоге системных временных зон (см. ниже). Чаще всего файл /etc/localtime является ссылкой на подходящий файл временной зоны.

Если переменная TZ существует в окружении, но равна NULL или ее величина не может быть представлена ни в одном из перечисленных ниже форматах, то используется UTC (Coordinated Universal Time).

Величина TZ может быть представлена в одном из трех форматов. Первый формат используется, если в локальной временной зоне не существует установки перехода на летнее время:

    std offset

Строка std определяет название временной зоны и может содержать три или более символа алфавита. Строка offset, следующая непосредственно за std, обозначает время, которое необходимо добавить к локальному, чтобы получить UTC. Величина offset положительна, если локальная временная зона находится западнее нулевого меридиана, и отрицательна, если восточнее. Количество часов колеблется от нуля до 24-х, а минут и секунд - от нуля до 59-и.

Второй формат используется, когда необходим учет перехода на летнее время:

    std offset dst [offset],start[/time],end[/time]

В спецификации не должно быть пробелов. Начальное значение std и offset определяет стандартную временную зону, как описано выше. Строка dst и offset определяет зону и смещение временной зоны при переходе на летнее время. Если offset опущен, то по умолчанию используется значение на час больше зимнего времени.

Поле start определяет, когда начинает действие период летнего времени, а поле end определяет момент окончания этого периода. Эти поля могут быть представлены в следующих форматах:

Jn  Определяет день номер n по Юлианскому календарю (между 1 and 365). 29 февраля не учитывается даже в високосные года.

n   Определяет день номер n по Юлианскому календарю (между 1 and 365). 29 февраля в високосном году учитывается.

Mm.w.d
    Определяет день номер d (0 <= d <= 6) в неделе номер w (1 <= w <= 5) месяца m (1 <= m <= 12). Неделя номер 1 - это первая неделя, в которой есть день d , неделя номер 5 - это последняя неделя, в которой есть день d. День номер 0 - это воскресенье.

Третий формат определяет, что информация о временной зоне должна быть получена из файла

    :[filespec]

Если спецификация файла filespec опущена, то информация о временной зоне будет получена из файла localtime каталога системных временных зон, который в настоящее время обычно расположен в /usr/share/zoneinfo. Это файл формата tzfile(5). Если filespec указан, он определяет другой файл формата tzfile(5), из которого будет получена информация о временной зоне. Если filespec не начинается с символа `/', то этот файл находится внутри каталога системных временных зон.

ФАЙЛЫ
Местоположение каталога системных временных зон зависит от версии (g)libc. Libc4 и libc5 используют /usr/lib/zoneinfo, а начиная с libc-5.4.6, если это не работает, используется /usr/share/zoneinfo. Glibc2 использует переменную окружения TZDIR, если она существует. По умолчанию это /usr/share/zoneinfo.

Этот каталог временных зон содержит файлы:
localtime      файл локальной временной зоны
posixrules     правила для TZ, описанные POSIX

Чаще всего /etc/localtime - это символьная ссылка на файл localtime или на корректный файл временной зоны.

СООТВЕТСТВИЕ СТАНДАРТАМ
SVID 3, POSIX, BSD 4.3

ЗАМЕЧАНИЯ
Обратите внимание, что переменная dailight не показывает, используется ли "летнее" время прямо сейчас. Она используется для указания номера алгоритма (см. переменную tz_dsttime в gettimeofday(2)). Многие годы она считается устаревшей, но по-прежнему включена в SUSv2.

В BSD4.3 имелась функция char *timezone(zone,dst), которая возвращала имя временной зоны, соответствующей первому аргументу (минуты западнее GMT). Если второй аргумент не равнялся 0, то использовалось стандартное имя, иначе использовалось версия "летнего" времени.

СМ. ТАКЖЕ
date(1), gettimeofday(2), time(2), ctime(3), getenv(3), tzfile(5)