ZIC - Linux手册页

时间:2019-08-20 18:02:05  来源:igfitidea点击:

Section: Linux System Administration (8)
更新日期: 2020-08-13

名称

zic-时区编译器

语法

zic [选项...] [文件名...]

说明

zic程序从命令行上命名的文件中读取文本,并创建此输入中指定的时间转换信息文件。如果文件名是标准输入,则读取输入。

选项

--version
输出版本信息并退出。
--help
输出短使用消息并退出。
-b bloat
输出由bloat指定的向后兼容性数据。如果膨胀过大,请生成其他数据条目,以解决较旧软件(例如处理64位生成数据的软件)中潜在的错误或不兼容的问题。如果膨胀很小,则使输出文件较小;这可以帮助检查错误和不兼容性。尽管当前默认值是胖,但这是打算在将来的zic版本中进行更改,因为错误处理64位数据的软件通常无论如何都会错误处理2038年之后的时间戳。另请参见-r选项以获取另一种缩小输出大小的方法。
-d directory
在命名目录而不是下面的标准目录中创建时间转换信息文件。
-l timezone
Use timezone

as local time.
zic

will act as if the input contained a link line of the form

链接时区本地时间

-L leapsecondfilename
从具有给定名称的文件中读取leap秒信息。如果不使用此选项,则输出文件中不会出现leap秒信息。
-p timezone
Use timezone's

rules when handling nonstandard
TZ strings like "EET-2EEST" that lack transition rules.
zic

will act as if the input contained a link line of the form

链接时区规则

此功能已过时且支持不佳。除其他事项外,不应将其用于2037年以后的时间戳记,并且如果时区的转换是在标准时间或世界标准时间(UT)而非本地时间进行,则不应与-b slim结合使用。

-r [@lo][/@hi]
通过将输出文件的适用性限制在从lo(包括)到hi(不包括)之间的时间戳中来减小输出文件的大小,其中lo和hi可能是自大纪元(1970-01-01 00:00)以来秒的带符号十进制计数:00 UTC)。省略计数默认为极值。例如,省略用于负时间戳(即,在大纪元之前)的数据,并输出仅用于适合31位带符号整数的非负时间戳的数据。在具有GNU日期的平台上,将忽略过去时间戳记的数据。另请参见-b slim选项,以了解另一种缩小输出大小的方法。
-t file
创建本地时间信息时,将配置链接放在命名文件中,而不是在标准位置。
-v
Be more verbose, and complain about the following situations:

输入指定到链接的链接。

数据文件中出现的年份不在可表示的年份范围内。

输入中将显示24:00或更长的时间。 1998年之前的zic版本禁止24:00,而2007年之前的版本禁止大于24:00的时间。

规则超过了月初或月末。 2004年以前的zic版本禁止这样做。

时区缩写使用%z格式。 2015年之前的zic版本不支持此功能。

时间戳包含小数秒。 2018年之前的zic版本不支持此功能。

输入中包含的缩写词由于长期存在的编码错误而被2018年前的zic版本处理不正确。这些缩写包括for for和for

输出文件不包含有关时区的长期将来的所有信息,因为将来不能总结为扩展的POSIX TZ字符串。例如,自2019年起,伊朗的夏时制规则在预测的将来会出现此问题,因为这些规则基于无法表示的伊朗日历。

输出中包含为较旧的zic输出格式设计的客户端代码可能无法正确处理的数据。这些兼容性问题仅影响1970年之前或2038年开始之后的时间戳。

输出文件包含1200多个过渡,某些客户端可能会处理不正确。当前的参考客户端最多支持2000个转换。 2014年之前的参考客户端版本最多支持1200个转换。

时区缩写少于3个或超过6个字符。 POSIX至少需要3,并且要求实现至少要支持6。

输出文件名包含一个不是ASCII字母的字节,或者包含文件名组成部分,该组成部分包含超过14个字节或以

文件

输入文件使用本节中描述的格式。输出文件使用tzfile(5)格式。

输入文件应该是文本文件,也就是说,它们应该是一系列零个或多个行,每行以换行符结尾,最多包含511个字节,并且没有任何NUL字节。输入文本的编码通常为UTF-8或ASCII;对于POSIX可移植字符集(PPCS)lahttp://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.htmlra,它应具有单字节表示形式,并且编码的非单字节字符应完全由非PPCS字节组成。非PPCS字符通常仅在注释中出现:尽管输出文件名和时区缩写几乎可以包含任何字符,但如果将它们限制为-v选项下描述的受限语法,则其他软件会更好地工作。

输入行由字段组成。字段之间用一个或多个空格字符隔开。空格字符是空格,换页符,回车符,换行符,制表符和垂直制表符。输入行上的前导空格和尾随空格将被忽略。输入中未加引号的尖角字符(#)会引入注释,该注释会延伸到出现尖角字符的行的结尾。如果要将空白字符和尖锐字符用作字段的一部分,则可以将它们用双引号(")引起来。任何空白行(注释去除后)都将被忽略。非空白行应为以下其中之一三种类型:规则线,区域线和链接线。

名称必须为英文且不区分大小写。它们出现在多个上下文中,并包括月份和工作日的名称和关键字,例如最大,仅,滚动和区域。可以通过省略除前缀之外的所有名称来缩写名称。任何缩写在上下文中都必须明确。

规则行具有以下形式

     

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

For example:


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

The fields that make up a rule line are:

NAME
提供包含此行的规则集的名称。名称必须以既不是ASCII数字也不是ASCII字符开头。为了允许将来扩展,未加引号的名称不应包含集合中的字符
FROM
给出规则适用的第一年。可以提供任何带符号的整数年;假定公历为公历,第1年在第0年。最小(或缩写)一词表示不确定的过去。 "最大"(或缩写)一词表示不确定的未来。规则可以描述无法表示为时间值的时间,而忽略无法表示的时间;这使得规则可以在具有不同时间值类型的主机之间移植。
TO
给出规则适用的最后一年。除了最小值和最大值(如上所述)之外,仅单词(或缩写)可以用来重复FROM字段的值。
TYPE
应该存在并存在,以便与可能包含年份类型的zic的较早版本兼容。
IN
命名规则生效的月份。月份名称可以缩写。
ON
Gives the day on which the rule takes effect. Recognized forms include:
5        the fifth of the month
lastSun  the last Sunday in the month
lastMon  the last Monday in the month
Sun>=8   first Sunday on or after the eighth
Sun<=25  last Sunday on or before the 25th

工作日名称(例如,星期日)或以(例如,lastSunday)开头的工作日名称可以缩写或完整说明。 ON字段内不得有空格字符。和构造可导致相邻月份的一天;例如,IN-ON组合代表10月31日或之后的第一个星期日,即使该星期日发生在11月。

AT
Gives the time of day at which the rule takes effect, relative to 00:00, the start of a calendar day. Recognized forms include:
2            time in hours
2:00         time in hours and minutes
01:28:14     time in hours, minutes, and seconds
00:19:32.13  time with fractional seconds
12:00        midday, 12 hours after 00:00
15:00        3 PM, 15 hours after 00:00
24:00        end of day, 24 hours after 00:00
260:00       260 hours after 00:00
-2:30        2.5 hours before 00:00
-            equivalent to 0

尽管zic将时间四舍五入到最接近的整数秒(打破与偶数整数的联系),但这些分数可能对需要更高精度的其他应用很有用。源格式未指定任何最大精度。如果给定的时间是本地时间或时间,则这些格式中的任何一个都可以跟字母w,如果给定的时间是标准时间(不对夏令时进行任何调整),则以s开头;如果给定的时间是世界时,则以u(或g或z)开头。 ;在没有指示器的情况下,假定使用本地(挂钟)时间。这些形式忽略leap秒;例如,如果a秒发生在当地时间00:59:60,则表示当地午夜后的3601秒,而不是通常的3600秒。目的是用规则线描述将设置为AT字段中指定的时间类型的时钟/日历显示指定的日期和时间的时刻。

SAVE
给出规则生效时要添加到本地标准时间的时间,以及得出的时间是标准时间还是夏令时。该字段具有与AT字段相同的格式,只是带有不同的后缀字母集:s为标准时间,d为夏时制。通常省略后缀字母,如果偏移量为零,则默认为s,否则为d。允许负偏移量;例如,在爱尔兰,夏令时在冬季被观察到,并且相对于爱尔兰标准时间具有负偏移。偏移量仅添加到标准时间;例如,zic不能将10:30标准时间加0:30保存与10:00标准时间加1:00保存区分开。
LETTER/S
给出该规则生效时要使用的(例如,时区缩写in或in或of。如果此字段为变量,则part为null。

区域线的形式为

     
Zone  NAME        STDOFF  RULES   FORMAT  [UNTIL]

For example:



     Zone         Asia/Amman      2:00    JordanEE%sT2017 Oct 27 01:00

The fields that make up a zone line are:

NAME
时区的名称。这是在创建时区的时间转换信息文件时使用的名称。它不应包含文件名组件,或者文件名组件是不包含的最大子字符串
STDOFF
添加到UT以获得标准时间的时间量,无需为夏时制进行任何调整。此字段与规则行的AT和SAVE字段具有相同的格式;如果必须从UT中减去时间,则以负号开头该字段。
RULES
适用于时区的规则名称,或者是格式与规则行SAVE列相同的字段,给出要添加到本地标准时间效果的时间量,以及得出的时间是否为标准时间或夏令时。如果此字段为-,则始终应用标准时间。给定时间量后,只有标准时间的总和与该时间有关。
FORMAT
时区缩写的格式。字符对%s用于显示时区缩写的去向。或者,一种格式可以使用字符对%z表示±hh,±hhmm或±hhmmss形式的UT偏移,使用不丢失信息的最短格式,其中hh,mm和ss是UT的东(+)或西(-)的小时,分​​钟和秒。或者,斜杠(/)分隔标准和白天的缩写。为了符合POSIX,时区缩写应仅包含字母数字ASCII字符,并且
UNTIL
位置的UT偏移量或规则更改的时间。它采用YEAR [MONTH [DAY [TIME]]]一到四个字段的形式。如果指定了此选项,则从给定的UT偏移量和规则更改直到指定的时间生成时区信息,使用过渡之前有效的规则对其进行解释。月,日和一天中的时间与规则的IN,ON和AT字段具有相同的格式;尾随字段可以省略,对于缺少的字段,默认为最早的可能值。
下一行必须是一行;它与区域行的形式相同,只是省略了字符串和名称,因为继续行将在指定的时间开始的信息放置在前一行使用的文件中的前一行中的信息。就像区域线一样,连续线可能包含信息,表明下一行是进一步的连续。

如果某个区域在同一时间发生变化,而规则将在较早的区域或延续行中生效,则该规则将被忽略。默认情况下,具有命名规则集的区域或连续线L以标准时间开头:也就是说,L最早的规则之前的L的任何时间戳都使用在L首次转换为标准时间之后生效的规则。如果两个规则在同一瞬间生效,或者两个区域更改在同一瞬间生效,则在单个区域中是错误的。

链接线具有以下形式

     
Link  TARGET           LINK-NAME

For example:



     Link              Europe/IstanbulAsia/Istanbul

The
TARGET

field should appear as the
NAME

field in some zone line.
The
LINK-NAME

field is used as an alternative name for that zone;
it has the same syntax as a zone line's
NAME

field.

除了续行,行可以按任何顺序出现在输入中。但是,如果多个区域或链接线定义了相同的名称,或者一个链接线的源是另一个链接线的目标,则该行为是不确定的。

描述leap秒的文件可以包含leap行和到期行。跳行格式如下:

     

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

For example:


     
Leap  2016  Dec    31   23:59:60  +     S

The
YEAR,

MONTH,

DAY,

and
HH:MM:SS

fields tell when the leap second happened.
The
CORR

field
should be

if a second was added
or

if a second was skipped.
The
R/S

field
should be (an abbreviation of)

if the leap second time given by the other fields should be interpreted as UTC
or
(an abbreviation of)

if the leap second time given by the other fields should be interpreted as
local (wall clock) time.

到期行(如果存在)的格式为:

     

Expires  YEAR  MONTH  DAY  HH:MM:SS

For example:


     
Expires  2020  Dec    28   00:00:00

The
YEAR,

MONTH,

DAY,

and
HH:MM:SS

fields give the expiration timestamp in UTC for the leap second table;
zic

outputs this expiration timestamp by truncating the end of the output
file to the timestamp.
If there is no expiration line,
zic

also accepts a comment

where
E

is the expiration timestamp as a decimal integer count of seconds
since the Epoch, not counting leap seconds.
However, the

comment is an obsolescent feature,
and the leap second file should use an expiration line
instead of relying on a comment.

EXTENDED EXAMPLE

这是zic输入的扩展示例,旨在说明其许多功能。在此示例中,欧盟规则适用于欧盟及其前身组织欧洲共同体。

# 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           STDOFF      RULES  FORMAT  [UNTIL]
Zone    Europe/Zurich  0:34:08     -      LMT     1853 Jul 16
                       0:29:45.50  -      BMT     1894 Jun
                       1:00        Swiss  CE%sT   1981
                       1:00        EU     CE%sT

Link    Europe/Zurich  Europe/Vaduz

In this example, the timezone is named Europe/Zurich but it has an alias
as Europe/Vaduz. This example says that Zurich was 34 minutes and 8
seconds east of UT until 1853-07-16 at 00:00, when the legal offset
was changed to

7 degrees 26 minutes 22.50 seconds,
which works out to 0:29:45.50;
zic

treats this by rounding it to 0:29:46.
After 1894-06-01 at 00:00 the UT offset became one hour
and Swiss daylight saving rules (defined with lines beginning with

apply. From 1981 to the present, EU daylight saving rules have
applied, and the UTC offset has remained at one hour.

在1941年和1942年,夏令时从5月的第一个星期一的01:00到10月的第一个星期一的02:00。 1981年前的欧盟夏时制规则在这里无效,但为了完整起见而包括在内。自1981年以来,夏令时从3月的最后一个星期日UTC 01:00开始。直到1995年,它在UTC的9月的最后一个星期日结束,但是从1996年开始,它更改为10月的最后一个星期日。

出于显示目的,最初分别使用和。自从应用瑞士规则和后来的欧盟规则以来,时区的缩写是标准时间的CET和夏令时的CEST。

文件

/etc/localtime
默认本地时区文件。
/usr/share/zoneinfo
默认时区信息目录。

备注

对于具有两种以上本地时间类型的区域,可能需要在最早转换时间规则的AT字段中使用本地标准时间,以确保记录在编译文件中的最早转换时间正确。

如果在特定时区,由于夏令时开始而导致的时钟提前量与由于UT偏移量的变化而导致的时钟退避时间一致且等于该时间,则zic会在新的UT偏移量处进行到夏令时的单次过渡,而无需任何更改以本地(挂钟)时间显示。要获得单独的过渡,请使用多条区域延续线使用通用时间指定过渡时刻。

另外参见

tzfile(5),zdump(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/