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
ИМЯ
zic - компилятор часовых поясов
ОБЗОР
zic [ параметр … ] [ имя_файла … ]
ОПИСАНИЕ
Программа zic читает текст из файла(ов), имя которого задано в командной строке, и создаёт файлы с информацией о переводе времени. Если имя_файла равно \(lq-\(rq, то для чтения используется стандартный ввод.
ПАРАМЕТРЫ
--version | |
Вывод информации о версии и выход из программы. | |
--help | Вывод короткого сообщения об использовании и выход из программы. |
-d каталог | |
Создавать файлы с информацией о переводе времени в заданном каталоге, а не в стандартном каталоге, упомянутом далее. | |
-l часовой пояс | |
Использовать часовой пояс в качестве местного времени. В этом случае zic поступит так, как если бы входные данные содержали строку
Link часовой_пояс localtime
|
|
-p часовой пояс | |
Использовать правила часового пояса при обработке соответствующих переменных окружения POSIX. В этом случае zic поступит так, как если бы входные данные содержали строку
Link часовой_пояс posixrules
|
|
-L имя файла с високосной секундой | |
Прочитать информацию о високосной секунде из файла с заданным именем. Если этот параметр не используется, то в выходном файле информация о високосной секунде не появится. | |
-v | Выдавать более подробную информацию и сообщать о следующих ситуациях:
Во входных данных указана ссылка на ссылку.
Год из файла данных выходит за границы диапазона лет, представимого в значениях вызова time(2).
Во входных данных указано время 24:00 или более. До версий 1998 года в zic запрещено значение времени 24:00, а в версиях до 2007 года запрещены значения времени более 24:00.
Правило выходит за начало или конец месяца. До версий zic старше 2004 года это запрещено.
Выходной файл не содержит полной информации об отдалённом будущем часового пояса, так как будущее невозможно выразить в виде расширенной строки POSIX TZ. Например, в 2013 году эта проблема возникла с правилами перехода на летнее время в Иране для описанного будущего, так как эти правила основывались на иранском календаре, который невозможно описать.
В выводе содержатся данные, которые могут неправильно обрабатываться клиентским кодом со старым форматом вывода zic. Эти проблемы совместимости относятся только к меткам времени до 1970 года или после начала 2038 года.
В аббревиатуре часового пояса содержится менее трёх символов. В POSIX требуется не менее 3-х.
Имя выходного файла содержит байт, не являющийся буквой ASCII, \(lq-\(rq, \(lq/\(rq, или \(lq_\(rq; оно содержит компонент имени файла, в котором более 14 байт или который начинается с \(lq-\(rq.
|
-s | Ограничить значения времени в выходных файлах рамками значений из входных файлов, то есть со знаком или без знака. Этот параметр можно использовать для создания 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. Имена могут быть сокращены посредством пропуска всего кроме начального префикса; любое сокращение должно быть недвусмысленным в контексте. | |
Строка правила имеет вид
Описание полей, из которых состоит строка правила: |
NAME | Имя списка правил, в который входит эта строка. Оно должно начинаться не с цифры ASCII или \(lq-\(rq или \(lq+\(rq. Для возможных расширений в будущем незакавыченное имя не должно содержать символы \(lq!$%&’()*,/:;<=>?@[\]^‘{|}~\(rq. |
FROM | Первый год, в котором применяется данное правило. Можно задавать любое знаковое целое значение года; предполагается использование Григорианского календаря с нулевым годом перед первым. Слово minimum (или аббревиатура) означает бесконечное прошлое. Слово maximum (или аббревиатура) означает бесконечное будущее. Правила могут описывать времена, непредставимые как значения времени, такие времена игнорируются; это делает правила переносимыми между машинами с различными типами значений времени. |
TO | Последний год, в котором применяется данное правило. Вдобавок к minimum и maximum (описанным выше), может использоваться слово only (или аббревиатура), которое означает повторение значения из поля FROM. |
TYPE | Должно быть равно \(lq-\(rq и оставлено для совместимости со старыми версиями zic, которые не поддерживают тип года. |
IN | Название месяца, в котором начинает действовать правило. Название месяца может быть аббревиатурой. |
ON | День, в котором начинает действовать правило. Возможные формы записи:
Название дня недели (например, Sunday) или название дня недели, перед которым указывается \(lqlast\(rq (например, lastSunday), может быть аббревиатурой или писаться полностью. Заметим, что в поле ON не должно быть пробелов.
|
AT | Время дня, с которого начинает действовать правило. Возможные формы записи:
где час 0 означает полночь и начало нового дня, а час 24 означает полночь и конец дня. Любая из этих форм может заканчиваться символом w, если это местное «по настенным часам» \(lqwall clock\(rq время, s, если это локальное «стандартное» время, \(lqstandard\(rq или u (или g, или z), если это универсальное время; при отсутствии временного индикатора предполагается, что это местное время. Смысл в том, чтобы строка правила описывала моменты времени, когда часы/календарь, установленный в тип времени, указанном в поле AT, будут показывать заданный день и время суток.
|
SAVE | Количество времени, которое будет добавлено к локальному стандартному времени при начале действия правила. Это поле имеет тот же формат, что и поле AT, (хотя, конечно, при этом суффиксы w и s не используются). Допускаются отрицательные смещения; например, в Ирландии переход на летнее время проводят зимой и он задаётся как отрицательное смещение относительно стандартного ирландского времени. Смещение просто добавляется к стандартному времени; например, zic не делает различия между 10:30 по стандартному времени плюс 0:30 SAVE и 10:00 стандартного времени плюс 1:00 SAVE. |
LETTER/S | Переменная часть \(lqvariable part\(rq (например, \(lqS\(rq или \(lqD\(rq в \(lqEST\(rq или \(lqEDT\(rq) аббревиатуры часового пояса, который используется при действии правила. В этом поле символ \(lq-\(rq, указывает, что переменная часть равна null. |
Zone NAME UTOFF RULES FORMAT [UNTIL]Описание полей, из которых состоит строка часового пояса:
Например:
Zone Asia/Amman 2:00 Jordan EE%sT 2017 Oct 27 01:00
NAME | Название часового пояса. Это название используется при создании файла с информацией о переводе времени в этом поясе. В нём не должно содержаться компонентов имени файла \(lq.\(dq\(rq или \(lq..\(rq; компонент имени файла — это максимальная подстрока, которая не содержит \(lq/\(rq. |
UTOFF | Время, которое нужно добавить к UT, чтобы получить стандартное время. Это поле имеет тот же формат, что и поля AT и SAVE в строках правил. Если нужно отнять какое-то время от UT, введите знак минуса в начале поля. |
RULES | Название правил, которые применяются в часовом поясе, или, иначе говоря, поле в том же формате что и столбец SAVE в строке правила, задающей количество времени, которое нужно добавить к локальному стандартному времени и указывающее, будет ли получаемое время стандартным или летним. Если это поле равно -, то всегда используется стандартное время. Если указано количество времени, то учитывается только сумма стандартного и это количество. |
FORMAT | |
Формат аббревиатур часовых поясов. Пара символов %s используется как положение переменной части \(lqvariable part\(rq аббревиатуры часового пояса. Также в формате можно использовать пару символов %z для обозначения смещения UT в виде ±hh, ±hhmm или ±hhmmss; используется самая короткая форма, при которой не теряется информация, где hh, mm и ss это часы, минуты и секунды восточнее (+) или западнее (-) UT. Косая черта (/) разделяет стандартную аббревиатуру и аббревиатуру летнего времени. Для соответствия POSIX аббревиатура часового пояса должна содержать только буквенно-числовые символы ASCII \(lq+\(rq и \(lq-\(rq. | |
UNTIL | Время, с которого изменяются смещение UT или правила изменения расположения. Оно задаётся как ГОД [МЕСЯЦ [ДЕНЬ [ВРЕМЯ]]]. Если оно задано, то информация о часовом поясе формируется из заданного смещения UT и правила смены до заданного времени, которое учитывается согласно правилам, действовавшим до перехода. Месяц, день и время суток имеют тот же формат, что и поля IN, ON и AT в правиле; последние поля могут не задаваться, а по умолчанию для пропущенных полей действуют самые возможные ранние значения. |
Следующей должна быть строка продления \(lqcontinuation\(rq ; она имеет тот же формат, что и строка часового пояса, за исключением того, что в строке пропускается \(lqZone\(rq и название, так как строка продления будет задавать информацию, начиная со времени, указанном в информации \(lquntil\(rq из предыдущей строки в файле, использованном предыдущей строкой. Строки продления могут содержать информацию \(lquntil\(rq , как строки поясов, показывающую, что следующая строка имеет продолжение. |
Строка ссылки имеет вид
Link TARGET LINK-NAMEПоле TARGET должно иметь значение как у поля NAME из какой-нибудь строки пояса. Поле LINK-NAME используется для задания альтернативного имени этого часового пояса; оно имеет тот же синтаксис что и поле NAME в строке пояса.
Например:
Link Europe/Istanbul Asia/Istanbul
За исключением строк продления, строки могут располагаться в любом порядке. Однако поведение не определено, если несколько поясов или строк ссылок определяют одно имя, или если источник одной строки ссылки является назначением другой.
Строки файла, описывающего високосные секунды, имеют вид:
Поля YEAR, MONTH, DAY и HH:MM:SS задают время, когда случается високосная секунда. Поле CORR должно содержать \(lq+\(rq , если секунда добавляется, или \(lq-\(rq если секунда пропускается. Поле R/S должно равняться \(lqStationary\(rq (в виде аббревиатуры), если время високосной секунды, заданное другими полями, должно интерпретироваться как UTC, или \(lqRolling\(rq (в виде аббревиатуры), если время високосной секунды, заданное другими полями, должно интерпретироваться как местное время.
Leap YEAR MONTH DAY HH:MM:SS CORRR/S
Например:
Leap 2016 Dec 31 23:59:60 +S
РАСШИРЕННЫЙ ПРИМЕР
Вот расширенный пример входных данных zic, в котором показано много разных свойств. В этом примере правила EU — для Евросоюза и его предшественника — Европейского сообщества (EC).
В этом примере часовой пояс называется Europe/Zurich, но он является псевдонимом для Europe/Vaduz. Здесь показано, что Zurich был на 34 минуты и 8 секунд восточнее UT до 1853-07-16 00:00, пока смещение было не изменено законодательно на 7°26'22.50\(sd; хотя это работает до 0:29:45.50, в входном формате нельзя отразить дробные секунды, поэтому здесь они округлены. После 1894-06-01 00:00 смещение UT стало равно одному часу и применяются швейцарские правила перехода на летнее время (определены в строках, начинающиеся с \(lqRule Swiss\(rq) . С 1981 года по настоящее время применяются правила EU для перехода на летнее время, а смещение UTC осталось равным одному часу.
# RuleNAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Swiss 1941 1942 - May Mon>=1 1:001:00S Rule Swiss 1941 1942 - Oct Mon>=1 2:000-
Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00S 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:00S Rule EU 1996 max - Oct lastSun 1:00u 0-
# ZoneNAME UTOFF RULES FORMAT [UNTIL] Zone Europe/Zurich 0:34:08 - LMT1853 Jul 16 0:29:46 - BMT1894 Jun 1:00 Swiss CE%sT 1981 1:00 EU CE%sT
Link Europe/Zurich Europe/Vaduz
В 1941 и 1942 году летнее время начинается в первый понедельник мая в 01:00 и заканчивается в первый понедельник октября в 02:00. До 1981 года EU правила перехода на летнее время здесь не применяются, но показаны для полноты. Начиная с 1981 года летнее время начинается в последнее воскресенье марта в 01:00 UTC. До 1995 года оно заканчивается в последнее воскресенье сентября в 01:00 UTC, а с 1996 года изменено на последнее воскресенье октября.
Для отображения сначала использовались, соответственно, \(lqLMT\(rq и \(lqBMT\(rq . С момента начали применения швейцарских правил, а позже европейских, аббревиатурой часового пояса обозначение стандартного времени стало CET и CEST для летнего времени.
ФАЙЛЫ
/etc/localtime | |
Файл локального часового пояса | |
/usr/share/zoneinfo | |
Каталог по умолчанию с информацией о часовых поясах |
ЗАМЕЧАНИЯ
Для территорий, где имеется более двух типов местного времени, может потребоваться использовать локальное стандартное время в поле AT самого раннего правила перевода времени, чтобы быть уверенным, что самый ранний перевод времени записан в выходной файл правильно.
Если для определённого часового пояса увеличение времени, вызванное началом летнего времени, совпадает и равно уменьшению времени, вызванное изменением в смещении UT, то zic делает один переход на летнее время по новому смещению UT (без изменения местного времени). Чтобы получить раздельные переходы, используйте несколько строк продления поясов, задающих моменты перехода с помощью универсального времени.