ZIC(8) | Системное администрирование Linux | ZIC(8) |
zic - компилятор часовых поясов
zic [ параметр … ] [ имя_файла … ]
Программа zic читает текст из файла(ов), имя которого задано в командной строке, и создаёт файлы с информацией о переводе времени. Если имя_файла равно “-”, то для чтения используется стандартный ввод.
Link часовой_пояс localtime
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 байт или который начинается с “-”.
Входные файлы должны быть текстовыми, то есть, состоять из последовательностей нуля и более строк, каждая из которых заканчивается байтом новой строки, содержит не более 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Описание полей, из которых состоит строка правила:
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, будут показывать заданный день и время суток.
Строка часового пояса имеет вид
Zone NAME UTOFF RULES FORMAT [UNTIL] Например: Zone Asia/Amman 2:00 Jordan EE%sT 2017 Oct 27 01:00Описание полей, из которых состоит строка часового пояса:
Если пояс изменяется в тот же момент, что и правило вступает в действие в более раннем поясе или строке продолжения, то правило игнорируется. В одиночном поясе является ошибкой, если два правила вступают в силу в один и тот же момент времени или, если смена двух поясов происходит в один и тот же момент времени.
Строка ссылки имеет вид
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 для летнего времени.
Для территорий, где имеется более двух типов местного времени, может потребоваться использовать локальное стандартное время в поле AT самого раннего правила перевода времени, чтобы быть уверенным, что самый ранний перевод времени записан в выходной файл правильно.
Если для определённого часового пояса увеличение времени, вызванное началом летнего времени, совпадает и равно уменьшению времени, вызванное изменением в смещении UT, то zic делает один переход на летнее время по новому смещению UT (без изменения местного времени). Чтобы получить раздельные переходы, используйте несколько строк продления поясов, задающих моменты перехода с помощью универсального времени.
2019-03-06 |