TZFILE(5)

ИМЯ
tzfile - информация о часовом поясе

ОПИСАНИЕ
В данной странице описана структура файлов часовых поясов, которые используют функцией tzset(3). Обычно, эти файлы можно найти в каталоге /usr/lib/zoneinfo или /usr/share/zoneinfo. Файлы с информацией о часовых поясах начинаются со специальных символов «TZif», указывающих, что это файл с информацией о часовом поясе, за которыми следует символ версии формата файла (в виде 005, или ASCII NUL ('\0') или '2'), затем 15 байтов с нулями, зарезервированные для их последующего использования. После них находятся шесть четырехбайтных значений типа long, записанных в «стандартном» порядке байт (старший байт записывается первым). Это следующие значения:

tzh_ttisgmtcnt
    Количество UTC/локальных (local) индикаторов в файле

tzh_ttisstdcnt
    Количество стандартных/местных (wall) индикаторов в файле

tzh_leapcnt
    Количество високосных секунд, определённых в файле

tzh_timecnt
    Количество "момент перевода часов", определённых в файле

tzh_typecnt
    Количество "типов локального времени", определённых в файле (не должно быть равно 0).

tzh_charcnt
    Количество символов "строк аббревиатур часовых поясов", определённых в файле

За заголовком следуют четырехбайтные значения tzh_timecnt типа long, расположенные в порядке возрастания. Эти значения записаны "стандартным" порядком байт. Каждое из этих значений используется как момент перевода часов (в формате, возвращаемом функцией time(2)), при задании которого изменяются правила вычисления локального времени. После этого следуют однобайтные значения tzh_timecnt типа unsigned char; каждое из этих значений указывает, какому типу "локального времени", описанному в файле, соответствует момент перевод часов с тем же индексом. Эти значения выступают в роли индексов массива структур ttinfo (с элементами tzh_typecnt), который находится в файле после этих значений. Структура определена так:

struct ttinfo {
    long         tt_gmtoff;
    int          tt_isdst;
    unsigned int tt_abbrind;
};

Каждая структура состоит из четырехбайтного значения tt_gmtoff типа long, записанного "стандартным" порядком байт; за этим значением следует однобайтное значение tt_isdst и однобайтное значение tt_abbrind. В каждой структуре tt_gmtoff означает, сколько секунда надо добавить к UTC, tt_isdst определяет, будет ли tm_isdst устанавливаться localtime(3), и tt_abbrind является индексом массива аббревиатур часовых поясов; массив следует за структурами ttinfo.

После этого массива находятся пары четырехбайтных значений tzh_leapcnt, записанные "стандартным" порядком байт; первое значение каждой пары задает время (в формате time(2)) високосной секунды; вторая пара определяет общее количество високосных секунд, добавляемых к указанному моменту времени. Пары значений располагаются в порядке возрастания.

Затем в файле располагаются индикаторы стандартного/местного времени tzh_ttisstdcnt, каждый хранится в виде однобайтного значения; эти индикаторы определяют, как связаны моменты перевода часов с локальными типами времени: согласно стандартному или местному времени. Эти индикаторы используются, когда файл с информацией о часовых поясах работает с POSIX-совместимыми переменными окружения часовых поясов.

И наконец, в этом файле находятся UTC/локальные индикаторы tzh_ttisgmtcnt, каждый хранится в виде однобайтного значения; эти индикаторы определяют, как связаны моменты перевода часов с локальными типами времени: согласно UTC или локальному времени. Эти индикаторы используются, когда файл с информацией о часовых поясах работает с POSIX-совместимыми переменными окружения часовых поясов.

Функция localtime(3) использует первую структуру стандартного стандартного времени ttinfo из этого файла (или просто первую структуру ttinfo при отсутствии структуры стандартного времени), если значение tzh_timecnt равно нулю или аргумент времени меньше первого момента перевода часов, записанного в файле.

Для файлов с информацией о часовых поясах версии 2, вышеприведённый заголовок и данные, идущие за вторым заголовком и данными, идентичны по формату, за исключением того, что для каждого перевода времени или високосной секунды используется 8 байт. После второго заголовка и данных следует закрывающий символ новой строки, строка в формате переменной TZ из окружения POSIX для обработки моментов после последнего перевода времени, хранящегося в файле (между символами новой строки ничего нет, если для таких моментов нет представления POSIX).

СМОТРИТЕ ТАКЖЕ
ctime(3), tzset(3), tzselect(8) и timezone/tzfile.h из исходного кода glibc.