Linux repositories inspector
2019-03-06

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages

Manual pages about using a GNU/Linux system

man-pages

Linux kernel and C library user-space interface documentation

tzdata

Sources for time zone and daylight saving time data

ИМЯ

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

ОПИСАНИЕ

Файлы с информацией о часовых поясах, используемые tzset(3), обычно, находятся в каталоге /usr/share/zoneinfo. Они начинаются с 44-байтного заголовка, содержащего следующие поля:
* Информационная (magic) четырехбайтовая последовательность ASCII \(lqTZif\(rq , означающая, что это файл с информацией о часовом поясе.
* Байт с версией формата файла (например 2017, ASCII NUL или \(lq2\(rq, или \(lq3\(rq).
* Пятнадцать байт, заполненных нулями, зарезервированы для использования в будущем.
* Шесть четырехбайтовых целых значений, записанных в стандартном порядке байт (старший байт значения записывается первым). Значения по порядку:
tzh_ttisgmtcnt
Количество UT/локальных (local) индикаторов в файле.
tzh_ttisstdcnt
Количество стандартных/местных (wall) индикаторов в файле.
tzh_leapcnt
Количество високосных секунд, для которых в файле определены элементы данных.
tzh_timecnt
Количество моментов перевода часов, для которых в файле определены элементы данных.
tzh_typecnt
Количество типов локального времени, для которых в файле определены элементы данных (не должно быть равно 0).
tzh_charcnt
Количество байт строк аббревиатур часовых поясов, определённых в файле.
После заголовка, описанного выше, располагаются поля, длина которых зависит от содержимого заголовка:
* Четырёхбайтовые знаковые целые tzh_timecnt, сортируются в порядке возрастания. Эти значения записываются в стандартном порядке байт. Каждое значение используется как момент перевода часов (возвращаемый time(2)), по правилам которого вычисляется изменение локального времени.
* Однобайтовые беззнаковые целые tzh_timecnt; все кроме последнего описывают как различные типы типов локального времени, указанные в файле, связаны с периодом времени, начинающимся как переходное время с тем же индексом и перечисляются (исключая) до следующего переходного времени (тип последнего времени указывается только для проверки целостности строки TZ в формате POSIX, описанном ниже). Эти значения служат индексами для следующего поля.
* Элементы tzh_typecnt ttinfo определены следующим образом:
struct ttinfo {
     int32_t      tt_gmtoff;
     unsigned chartt_isdst;
     unsigned chartt_abbrind;
};
Каждая структура состоит из четырехбайтного знакового числа tt_gmtoff, записанного в стандартном порядке байт; за ним следует однобайтное значение tt_isdst и однобайтное значение tt_abbrind. В каждой структуре tt_gmtoff означает, сколько секунд надо добавить к UT; tt_isdst определяет, будет ли tm_isdst устанавливаться localtime(3), а tt_abbrind является индексом массива аббревиатур байт часовых поясов, за которым в файле следуют структуры ttinfo.
* Пары четырехбайтных значений tzh_leapcnt, записанные в стандартном порядке байт; первое значение каждой пары задает неотрицательное время (возвращаемое time(2)) появления високосной секунды; вторая пара определяет общее количество високосных секунд, добавляемых во время периода времени, начинающегося в указанное время. Пары значений располагаются в порядке возрастания времени. Каждым переходом считается одна високосная секунда, положительная или отрицательная; переходы всегда отстают друг от друга на не менее чем 28 дней минус 1 секунда.
* Индикаторы стандартного/местного времени tzh_ttisstdcnt, хранимые в виде однобайтовых значений; эти индикаторы определяют, как связаны моменты перевода часов с локальными типами времени: согласно стандартному или местному времени. Эти индикаторы используются, когда файл с информацией о часовых поясах работает с POSIX-совместимыми переменными окружения часовых поясов.
* UT/локальные индикаторы tzh_ttisgmtcnt, хранимые в виде однобайтовых значений; эти индикаторы определяют, как связаны моменты перевода часов с локальными типами времени: согласно UT или локальному времени. Эти индикаторы используются, когда файл с информацией о часовых поясах работает с POSIX-совместимыми переменными окружения часовых поясов.
Функция localtime(3) использует первую структуру стандартного времени ttinfo из этого файла (или просто первую структуру ttinfo при отсутствии структуры стандартного времени), если значение tzh_timecnt равно нулю или аргумент времени меньше первого момента перевода часов, записанного в файле.

Формат версии 2

Для файлов версии 2 с информацией о часовых поясах вышеприведённый заголовок и данные, идущие за вторым заголовком и данными, идентичны по формату, за исключением того, что для каждого перевода времени или високосной секунды используется восемь байт (високосная секунда занимает оставшиеся четыре байта). После второго заголовка и данных следует закрывающий символ новой строки, строка в формате переменной TZ из окружения POSIX для обработки моментов сразу после последнего перевода времени, хранящегося в файле или для всех моментов, если в файле нет переводов. Строка TZ в формате POSIX будет пустой (т. е. между символами новой строки ничего нет), если для таких моментов нет представления POSIX. Если она не пуста, то строка TZ в формате POSIX должна соответствовать типу локального времени после обоих данных о временах последнего перевода, если она представлена в виде восьми байтов данных; например, если задана строка \(lqWET0WEST,M3.5.0,M10.5.0/3\(rq то, если последний перевод времени был в июле, тип перевода локального времени должен задаваться сокращением для времени перевода на зимнее время \(lqWEST\(rq то соответствует одному часу UT. Также, если есть хотя бы один перевод, то тип времени 0 связывается с периодом времени из бесконечного прошлого до, но исключая, самый ранний перевод времени.

Формат версии 3

В формате файлов часовых поясов версии 3 в строке в стиле POSIX-TZ можно использовать два небольших расширения формата POSIX TZ, это описывается в newtzset(3). Во-первых, часовая часть времён перевода может быть знаковой и имеет диапазон с -167 по 167, и не соответствовать беззнаковому значению POSIX от 0 до 24. Во-вторых, DST действует на весь год, если он начинается с 1 января 00:00 и заканчивается 31 декабря в 24:00 плюс разница между зимним и обычным временем.
В будущих изменениях формата могут появиться дополнительные данные.

СМОТРИТЕ ТАКЖЕ

⇧ Top