TZFILE(5)

НАЗВАНИЕ
tzfile - информация о часовом поясе

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

ОПИСАНИЕ
Файлы с информацией о часовых поясах, используемые функцией tzset(3), начинаются со специальных символов "TZif", указывающих, что это - файл с информацией о часовом поясе. За ними следуют 16 байтов, зарезервированных для их последующего использования. После них находятся шесть четырехбайтных значений типа long, записанных в "стандартном" порядке байтов (старшие байты записываются первыми). Это следующие значения:

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

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

tzh_leapcnt
    (количество високосных секунд в файле);

tzh_timecnt
    (количество "переходных периодов" в файле);

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

tzh_charcnt
    (количество символов в "аббревиатурах часовых поясов" файла).

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

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 использует первую структуру стандартного местного времени ttinfo из этого файла (или просто первую структуру ttinfo при отсутствии структур стандартного местного времени), если tzh_timecnt равен 0, или аргумент времени меньше временного аргумента первого "переходного периода", записанного в файле.