ZIC(8) Системное администрирование Linux ZIC(8)

ИМЯ

zic - компилятор часовых поясов

ОБЗОР

zic [ параметр … ] [ имя_файла … ]

ОПИСАНИЕ

Программа zic читает текст из файла(ов), имя которого задано в командной строке, и создаёт файлы с информацией о переводе времени. Если имя_файла равно “-”, то для чтения используется стандартный ввод.

ПАРАМЕТРЫ

Вывод информации о версии и выход из программы.
Вывод короткого сообщения об использовании и выход из программы.
Создавать файлы с информацией о переводе времени в заданном каталоге, а не в стандартном каталоге, упомянутом далее.
Использовать часовой пояс в качестве местного времени. В этом случае zic поступит так, как если бы входные данные содержали строку

Link часовой_пояс localtime

Использовать правила часового пояса при обработке соответствующих переменных окружения POSIX. В этом случае zic поступит так, как если бы входные данные содержали строку

Link часовой_пояс posixrules

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

Во входных данных указана ссылка на ссылку.

Год из файла данных выходит за границы диапазона лет, представимого в значениях вызова time(2).

Во входных данных указано время 24:00 или более. До версий 1998 года в zic запрещено значение времени 24:00, а в версиях до 2007 года запрещены значения времени более 24:00.

Правило выходит за начало или конец месяца. До версий zic старше 2004 года это запрещено.

Выходной файл не содержит полной информации об отдалённом будущем часового пояса, так как будущее невозможно выразить в виде расширенной строки POSIX TZ. Например, в 2013 году эта проблема возникла с правилами перехода на летнее время в Иране для описанного будущего, так как эти правила основывались на иранском календаре, который невозможно описать.

В выводе содержатся данные, которые могут неправильно обрабатываться клиентским кодом со старым форматом вывода zic. Эти проблемы совместимости относятся только к меткам времени до 1970 года или после начала 2038 года.

В аббревиатуре часового пояса содержится менее трёх символов. В POSIX требуется не менее 3-х.

Имя выходного файла содержит байт, не являющийся буквой ASCII, “-”, “/”, или “_”; оно содержит компонент имени файла, в котором более 14 байт или который начинается с “-”.

Ограничить значения времени в выходных файлах рамками значений из входных файлов, то есть со знаком или без знака. Этот параметр можно использовать для создания SVVS-совместимых файлов.

Входные файлы должны быть текстовыми, то есть, состоять из последовательностей нуля и более строк, каждая из которых заканчивается байтом новой строки, содержит не более 511 байт и не содержит байтов NUL. Кодировка входного текста, обычно, UTF-8 или ASCII; в ней должно быть юнибайтовое представление переносимого набора символов POSIX (PPCS) (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.html) и кодирование не юнибайтовых символов должно быть полностью из байт не PPCS. Не PPCS символы, обычно, встречаются только в комментариях: хотя имена выходных файлов и сокращения часовых поясов могут содержать практически любые символы, другое ПО будет работать лучше, если здесь ограничиться синтаксисом, описанным в параметре -v.

Входные строки состоят из полей. Поля отделяются друг от друга одним или более пробельным символом. Пробельными символами являются пробел, прогон страницы, возврат каретки, символ новой строки, табуляция и вертикальная табуляция. Начальные и конечные пробелы входных строк игнорируются. С символа диеза (#), если он не кавычках, начинается комментарий, заканчивающийся концом строки. Если в поле нужно использовать символы пробела и диеза, то их нужно заключить в двойные кавычки ("). Любая пустая строка (после удаления комментариев) игнорируется. Непустые строки могут быть трёх типов: строки правил, строки поясов и строки ссылок.

Названия должны быть на английском, не зависят от регистра. Они используются в разных контекстах и включают имена месяца, дня недели и ключевые слова, например, maximum, only, Rolling и Zone. Имена могут быть сокращены посредством пропуска всего кроме начального префикса; любое сокращение должно быть недвусмысленным в контексте.

Строка правила имеет вид


Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S

Например:

Rule	US	1967	1973	-	Apr	lastSun	2:00w	1:00	D

Описание полей, из которых состоит строка правила:
Имя списка правил, в который входит эта строка. Оно должно начинаться не с цифры ASCII или “-” или “+”. Для возможных расширений в будущем незакавыченное имя не должно содержать символы “!$%&'()*,/:;<=>?@[\]^`{|}~”.
Первый год, в котором применяется данное правило. Можно задавать любое знаковое целое значение года; предполагается использование Григорианского календаря с нулевым годом перед первым. Слово minimum (или аббревиатура) означает бесконечное прошлое. Слово maximum (или аббревиатура) означает бесконечное будущее. Правила могут описывать времена, непредставимые как значения времени, такие времена игнорируются; это делает правила переносимыми между машинами с различными типами значений времени.
Последний год, в котором применяется данное правило. Вдобавок к minimum и maximum (описанным выше), может использоваться слово only (или аббревиатура), которое означает повторение значения из поля FROM.
Должно быть равно “-” и оставлено для совместимости со старыми версиями zic, которые не поддерживают тип года.
Название месяца, в котором начинает действовать правило. Название месяца может быть аббревиатурой.
День, в котором начинает действовать правило. Возможные формы записи:


5	пятый день месяца
lastSun	последнее воскресенье месяца
lastMon	последний понедельник месяца
Sun>=8	первое воскресенье после 8-го числа включительно
Sun<=25	последнее воскресенье перед 25-м включительно

Название дня недели (например, Sunday) или название дня недели, перед которым указывается “last” (например, lastSunday), может быть аббревиатурой или писаться полностью. Заметим, что в поле ON не должно быть пробелов.

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


2	время в часах
2:00	время в часах и минутах
01:28:14	время в часах, минутах и секундах
15:00	время в 24-часовом формате

     	(для времени после полудня)
260:00	260 часов после 00:00
-2:30	2.5 часа до 00:00
-	эквивалентно 0

где час 0 означает полночь и начало нового дня, а час 24 означает полночь и конец дня. Любая из этих форм может заканчиваться символом w, если это местное «по настенным часам» “wall clock” время, s, если это локальное «стандартное» время, “standard” или u (или g, или z), если это универсальное время; при отсутствии временного индикатора предполагается, что это местное время. Смысл в том, чтобы строка правила описывала моменты времени, когда часы/календарь, установленный в тип времени, указанном в поле AT, будут показывать заданный день и время суток.

Количество времени, которое будет добавлено к локальному стандартному времени при начале действия правила. Это поле имеет тот же формат, что и поле AT, (хотя, конечно, при этом суффиксы w и s не используются). Допускаются отрицательные смещения; например, в Ирландии переход на летнее время проводят зимой и он задаётся как отрицательное смещение относительно стандартного ирландского времени. Смещение просто добавляется к стандартному времени; например, zic не делает различия между 10:30 по стандартному времени плюс 0:30 SAVE и 10:00 стандартного времени плюс 1:00 SAVE.
Переменная часть “variable part” (например, “S” или “D” в “EST” или “EDT”) аббревиатуры часового пояса, который используется при действии правила. В этом поле символ “-”, указывает, что переменная часть равна null.

Строка часового пояса имеет вид

Zone	NAME	UTOFF	RULES	FORMAT	[UNTIL]

Например:

Zone	Asia/Amman	2:00	Jordan	EE%sT	2017 Oct 27 01:00

Описание полей, из которых состоит строка часового пояса:
Название часового пояса. Это название используется при создании файла с информацией о переводе времени в этом поясе. В нём не должно содержаться компонентов имени файла “."” или “..”; компонент имени файла — это максимальная подстрока, которая не содержит “/”.
Время, которое нужно добавить к UT, чтобы получить стандартное время. Это поле имеет тот же формат, что и поля AT и SAVE в строках правил. Если нужно отнять какое-то время от UT, введите знак минуса в начале поля.
Название правил, которые применяются в часовом поясе, или, иначе говоря, поле в том же формате что и столбец SAVE в строке правила, задающей количество времени, которое нужно добавить к локальному стандартному времени и указывающее, будет ли получаемое время стандартным или летним. Если это поле равно -, то всегда используется стандартное время. Если указано количество времени, то учитывается только сумма стандартного и это количество.
Формат аббревиатур часовых поясов. Пара символов %s используется как положение переменной части “variable part” аббревиатуры часового пояса. Также в формате можно использовать пару символов %z для обозначения смещения UT в виде ±hh, ±hhmm или ±hhmmss; используется самая короткая форма, при которой не теряется информация, где hh, mm и ss это часы, минуты и секунды восточнее (+) или западнее (−) UT. Косая черта (/) разделяет стандартную аббревиатуру и аббревиатуру летнего времени. Для соответствия POSIX аббревиатура часового пояса должна содержать только буквенно-числовые символы ASCII “+” и “-”.
Время, с которого изменяются смещение UT или правила изменения расположения. Оно задаётся как ГОД [МЕСЯЦ [ДЕНЬ [ВРЕМЯ]]]. Если оно задано, то информация о часовом поясе формируется из заданного смещения UT и правила смены до заданного времени, которое учитывается согласно правилам, действовавшим до перехода. Месяц, день и время суток имеют тот же формат, что и поля IN, ON и AT в правиле; последние поля могут не задаваться, а по умолчанию для пропущенных полей действуют самые возможные ранние значения.
Следующей должна быть строка продления “continuation” ; она имеет тот же формат, что и строка часового пояса, за исключением того, что в строке пропускается “Zone” и название, так как строка продления будет задавать информацию, начиная со времени, указанном в информации “until” из предыдущей строки в файле, использованном предыдущей строкой. Строки продления могут содержать информацию “until” , как строки поясов, показывающую, что следующая строка имеет продолжение.

Если пояс изменяется в тот же момент, что и правило вступает в действие в более раннем поясе или строке продолжения, то правило игнорируется. В одиночном поясе является ошибкой, если два правила вступают в силу в один и тот же момент времени или, если смена двух поясов происходит в один и тот же момент времени.

Строка ссылки имеет вид

Link	TARGET	LINK-NAME

Например:

Link	Europe/Istanbul	Asia/Istanbul

Поле TARGET должно иметь значение как у поля NAME из какой-нибудь строки пояса. Поле LINK-NAME используется для задания альтернативного имени этого часового пояса; оно имеет тот же синтаксис что и поле NAME в строке пояса.

За исключением строк продления, строки могут располагаться в любом порядке. Однако поведение не определено, если несколько поясов или строк ссылок определяют одно имя, или если источник одной строки ссылки является назначением другой.

Строки файла, описывающего високосные секунды, имеют вид:


Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S

Например:

Leap	2016	Dec	31	23:59:60	+	S

Поля YEAR, MONTH, DAY и HH:MM:SS задают время, когда случается високосная секунда. Поле CORR должно содержать “+” , если секунда добавляется, или “-” если секунда пропускается. Поле R/S должно равняться “Stationary” (в виде аббревиатуры), если время високосной секунды, заданное другими полями, должно интерпретироваться как UTC, или “Rolling” (в виде аббревиатуры), если время високосной секунды, заданное другими полями, должно интерпретироваться как местное время.

РАСШИРЕННЫЙ ПРИМЕР

Вот расширенный пример входных данных zic, в котором показано много разных свойств. В этом примере правила EU — для Евросоюза и его предшественника — Европейского сообщества (EC).



# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-

Rule	EU	1977	1980	-	Apr	Sun>=1	1:00u	1:00	S
Rule	EU	1977	only	-	Sep	lastSun	1:00u	0	-
Rule	EU	1978	only	-	Oct	 1	1:00u	0	-
Rule	EU	1979	1995	-	Sep	lastSun	1:00u	0	-
Rule	EU	1981	max	-	Mar	lastSun	1:00u	1:00	S
Rule	EU	1996	max	-	Oct	lastSun	1:00u	0	-

# Zone	NAME	UTOFF	RULES	FORMAT	[UNTIL]
Zone	Europe/Zurich	0:34:08	-	LMT	1853 Jul 16
		0:29:46	-	BMT	1894 Jun
		1:00	Swiss	CE%sT	1981
		1:00	EU	CE%sT

Link	Europe/Zurich	Europe/Vaduz


В этом примере часовой пояс называется Europe/Zurich, но он является псевдонимом для Europe/Vaduz. Здесь показано, что Zurich был на 34 минуты и 8 секунд восточнее UT до 1853-07-16 00:00, пока смещение было не изменено законодательно на 7°26′22.50″; хотя это работает до 0:29:45.50, в входном формате нельзя отразить дробные секунды, поэтому здесь они округлены. После 1894-06-01 00:00 смещение UT стало равно одному часу и применяются швейцарские правила перехода на летнее время (определены в строках, начинающиеся с “Rule Swiss”) . С 1981 года по настоящее время применяются правила EU для перехода на летнее время, а смещение UTC осталось равным одному часу.

В 1941 и 1942 году летнее время начинается в первый понедельник мая в 01:00 и заканчивается в первый понедельник октября в 02:00. До 1981 года EU правила перехода на летнее время здесь не применяются, но показаны для полноты. Начиная с 1981 года летнее время начинается в последнее воскресенье марта в 01:00 UTC. До 1995 года оно заканчивается в последнее воскресенье сентября в 01:00 UTC, а с 1996 года изменено на последнее воскресенье октября.

Для отображения сначала использовались, соответственно, “LMT” и “BMT” . С момента начали применения швейцарских правил, а позже европейских, аббревиатурой часового пояса обозначение стандартного времени стало CET и CEST для летнего времени.

ФАЙЛЫ

/etc/localtime
Файл локального часового пояса
/usr/share/zoneinfo
Каталог по умолчанию с информацией о часовых поясах

ЗАМЕЧАНИЯ

Для территорий, где имеется более двух типов местного времени, может потребоваться использовать локальное стандартное время в поле AT самого раннего правила перевода времени, чтобы быть уверенным, что самый ранний перевод времени записан в выходной файл правильно.

Если для определённого часового пояса увеличение времени, вызванное началом летнего времени, совпадает и равно уменьшению времени, вызванное изменением в смещении UT, то zic делает один переход на летнее время по новому смещению UT (без изменения местного времени). Чтобы получить раздельные переходы, используйте несколько строк продления поясов, задающих моменты перехода с помощью универсального времени.

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

tzfile(5), zdump(8)

2019-03-06