ZIC(8)

名称
zic - タイムゾーンコンパイラ

書式
zic [-Dsv] [-d directory] [-g group] [-L leapsecondfilename] [-l localtime] [-m mode] [-p posixrules] [-u user] [-y command] [filename ...]

解説
zic はコマンド行で指定されたファイルを読み取り、その内容に従って 時刻変換情報のファイルを作成します。 filename が - だった場合、標準入力から読み込みます。

以下のオプションがあります:

-D  自動的にはディレクトリを作成しません。入力ファイルが出力先のファイルとして、 まだ存在していないディレクトリを指定していた場合には、デフォルトの動作では ディレクトリの作成を試みます。 -D が指定された場合には、 zic はそうせずに即座にエラーとします。

-d directory
    下記の標準ディレクトリではなく、指定されたディレクトリに時刻変換情報 ファイルを作成します。

-g group
    それぞれの出力ファイルを作成した後に、ファイルのグループオーナを指定された group (名前でも数字のグループ ID でも構いません) に変更します。

-L leapsecondfilename
    指定された名前のファイルからうるう秒の情報を読み込みます。 このオプションが指定されなかった場合、 出力ファイルにはうるう秒の情報は記録されません。

-l timezone
    指定された タイムゾーン をローカルの時刻に使用します。 zic は、以下のリンク行が入力ファイルにあった場合と同様に働きます。

        Link	timezone		localtime

    ( FreeBSD ではローカルタイムゾーンは /usr/share/zoneinfo/localtime でなく /etc/localtime で指定されるので、 このアクションは何の効果も持たないことに注意してください)。

-m mode
    それぞれの出力ファイルを作成した後、ファイルのアクセス権を mode に変更します。 モードは数字とアルファベットのどちらでも構いません ( chmod(1) 参照)。

-p timezone
    POSIX 形式のタイムゾーンの環境変数を扱う場合に、指定されたタイムゾーンの ルールを使用します。 zic は、以下のリンク行が入力ファイルにあった場合と同様に働きます。

        Link timezone posixrules

-u user
    それぞれの出力ファイルを作成した後に、ファイルのオーナを指定された user (名前でも数字のユーザ ID でも構いません) に変更します。

-v  データファイル中の年が time(3) で表現できる年の範囲を超えていた場合、警告します。

-s  出力ファイルに記録される時刻の値を、それが符号付きと扱われるか符号なしと 扱われるかに関係なく同じ値になるように制限します。 このオプションを使用することで SVVS と互換のファイルを生成できます。

-y command
    年のタイプをチェックする際に、 yearistype の代わりに指定された command を用います(下記参照)。

入力の各行はフィールドから構成されます。 各フィールドは任意の数の空白文字により分離されます。先行する空白や、 行末の空白は無視されます。引用符で囲まれていない井桁文字 (#) から その行の末尾まではコメントとして扱われます。 空白文字や井桁文字をフィールドの一部として使用する場合は、二重引用符 (") で囲みます。 (コメントを取り除いた後の)空白行は無視されます。 空白ではない行は、ルール行、ゾーン行、リンク行の 3 種類のいずれか であるとみなされます。

ルール行は、
    Rule	NAME	FROM	TO	TYPE	IN	ON		AT	SAVE	LETTER/S
と言う形式です。例えば、
    Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D

となります。ルール行を構成するフィールドは以下の通りです:

NAME
    このルールが属するルールの(任意の)名前を指定します。

FROM
    ルールが適用される最初の年を指定します。 如何なる整数の年も指定できます。グレゴリオ暦を仮定しています。 単語 minimum (あるいはその短縮形)は、整数で表せる最小の年を示します。 単語 maximum (あるいはその短縮形)は、整数で表せる最大の年を示します。 ルールは、時刻の値として表す事ができない時刻を定義します。 表す事ができない時刻は無視されます。これにより、時刻の値のタイプが 異なるホスト間でルールを共用する事ができます。

TO  ルールが適用される最後の年を指定します。 minimum や maximum (上記)に加え、 単語 only (あるいはその短縮形) を、 FROM フィールドの値を指すものとして使用することができます。

TYPE
    ルールが適用される年のタイプを指定します。 TYPE が - だった場合、ルールは、 FROM から TO までのその年を含む全ての年に適用されます。 TYPE がそれ以外だった場合、 zic は、コマンド yearistype year type を実行して、年のタイプをチェックします。実行したコマンドの 終了ステータスが 0 だった場合は、その年が指定されたタイプであり、 終了ステータスが 1 だった場合は、その年が指定されたタイプではないと 判断します。

IN  ルールが適用される月の名前を指定します。 月名は短縮形でも構いません。

ON  ルールが適用される日を指定します。 指定できる形式は以下の通りです:

    5   その月の 5 日
    lastSun
        その月の最後の日曜日
    lastMon
        その月の最後の月曜日
    Sun>=8
        8 日以降の最初の日曜日
    Sun<=25
        25 日以前の最後の日曜日

    曜日は短縮形でも、フルスペルでも構いません。注意: ON フィールド内にスペースを含んではいけません。

AT  ルールが適用される時刻を指定します。 指定できる形式は以下の通りです:

    2   時
    2:00
        時と分
    15:00
        24 時間形式の時刻 (正午以降について)
    1:28:14
        時、分、秒

    ここで、0 時は一日の始まりの深夜を意味し、 24時は一日の終わりの深夜を意味します。 これらの形式の最後に ‘w’ をつけると、指定した時刻がローカルの “ウォールクロック” (夏時間の適用される地域で、ローカルの標準時に、 夏時間の期間であればその修正を加えた時刻) であり、 ‘s’ をつけると、指定した時刻がローカルの “標準時” であり、 ‘u’ (あるいは ‘g’ ないし ‘z’) をつけると、指定した時刻が世界標準時であることを示します。 これらの文字を指定していない場合は、ウォールクロックが適用されます。

SAVE
    ルールが有効な場合にローカルの標準時に加えられる量を指定します。 このフィールドの形式は AT フィールドと同じです (この場合は、末尾に ‘w’ と ‘s’ を指定する事はできません)。

LETTER/S
    ルールが有効な場合にタイムゾーンの短縮形に用いられる “変化部分” (例えば、 “EST” や “EDT” の “S” や “D” ) を指定します。 このフィールドが - だった場合、変化部分はヌル (NULL) になります。

ゾーン行は、
    Zone	NAME	GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
と言う形式です。例えば、
    Zone	Australia/Adelaide	9:30	Aus	CST	1971 Oct 31 2:00
となります。ゾーン行を構成するフィールドは以下の通りです:

NAME
    タイムゾーンの名称です。 そのゾーンに対する時刻変換情報ファイルを作成する時の名前になります。

GMTOFF
    そのゾーンの標準時を得る時に UTC に加算される量です。 このフィールドの形式は、ルール行の AT および SAVE フィールドと同じです。 UTC から時刻を引く場合は、フィールドの最初にマイナスをつけます。

RULES/SAVE
    そのタイムゾーンに適用されるルールの名前、あるいは、ローカルの標準時に 加算される量を指定します。 このフィールドが - だった場合、そのタイムゾーンには常に標準時が適用されます。

FORMAT
    そのタイムゾーンで使用されるタイムゾーンの短縮形の形式を指定します。 文字列 %s は、タイムゾーンの短縮形で用いられる “変化部分” を示します。 一方、 スラッシュ (/) で標準時の短縮形と夏時間の短縮形を指定する事もできます。

UNTIL
    その場所で UTC との差あるいはルールが変化する時刻を指定します。 年、月、日、時刻を用いて指定できます。 このフィールドが指定された場合、その時刻になるまでは与えられた UTC との差 およびルールからタイムゾーンの情報が生成されます。 月、日、時刻はルールの IN, ON, AT カラムと同じ形式です。 続くカラムは省略可能で、 足りないカラムは最も早い可能な値がデフォルトとなります。

    この次の行は “継続” 行でなくてはなりません。この行は最初の “Zone” と NAME フィールドがない点を除いてはゾーン行と同一の形式で、その前の行の UNTIL フィールドで指定した時刻以降の情報を指定します。 この継続行にも UNTIL フィールドを指定する事ができ、その場合は、次の行に その時刻以降の情報を指定します。

リンク行は、
    Link	LINK-FROM	LINK-TO
と言う形式です。例えば、
    Link	Europe/Istanbul	Asia/Istanbul
となります。 LINK-FROM フィールドは、存在するゾーン行の NAME フィールドのいずれかと一致していなければなりません。 LINK-TO フィールドはそのゾーンに対する別名として使用されます。

継続行以外は、入力中での行の順番に制限はありません。

うるう秒の定義ファイルの各行は以下のような形式になります:
    Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
例えば、
    Leap	1974	Dec	31	23:59:60	+	S
となります。 YEAR, MONTH, DAY, HH:MM:SS フィールドは、うるう秒が起きる時刻を指定します。 CORR フィールドは、 秒が加えられる場合は “+” で、秒がスキップされる場合は “-” となります。 R/S フィールドは 他のフィールドで与えられるうるう秒の時刻が UTC である場合は、 “Stationary” (またはその短縮形)で、 他のフィールドで与えられるうるう秒の時刻がローカルのウォールクロックである 場合は、 “Rolling” (またはその短縮形)となります。

注
ローカル時刻が複数のタイプとなる地域では、 作成されたファイルの最初の変化時刻を正しく設定するためには、 最初の変化時刻のルールの AT フィールドでローカルの標準時を使用する必要があります。

関連ファイル
/usr/share/zoneinfo
    作成されたファイルが置かれる標準ディレクトリ

関連項目
ctime(3), tzfile(5), zdump(8)