Scroll to navigation

zic(8) System Manager's Manual zic(8)

名前

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

書式

zic [ option ... ] [ filename ... ]

説明

zic プログラムは、コマンドラインで指定されたファイルからテキストを読み取り、この入力で指定されたタイムゾーン情報フォーマット (TZif) ファイルを作成します。filename が “-” の場合、標準入から読み込まれます。

オプション

バージョン情報を出力し、終了します。
簡潔な使用方法を表示して、終了します。
bloat で指定された下位互換性のあるデータを出力します。bloat が fat の場合は、 TZif ファイルの 64 ビット・データまたは proleptic TZ 文字列を誤って処理するソフトウェアなど、古いソフトウェアの潜在的なバグまたは非互換性を回避する追加のデータ・エントリを生成します。bloat が slim の場合は、出力するファイルのサイズを小さくします。これにより、バグや非互換性をチェックできます。既定値は slim です。 fat の回避策は通常、いずれにしても 2038年までしか有効ではないためです。出力のサイズを変更する別の方法については、-r オプションも参照してください。
出力ファイルの親ディレクトリを作成しないでください。たとえば、America/Los_Angeles という名前のゾーンには、ディレクトリ America がすでに存在しているはずです。既定値別には、ディレクトリとその親がまだ存在しない場合は作成されます。-d directory 時間変換情報ファイルは、次に示す標準ディレクトリではなく、指定したディレクトリに作成してください。
timezone をローカルタイムとして用います。 zic は入力に以下の書式のリンク行が含まれているかのように振る舞います。

Link timezone localtime

timezone が - の場合、既存のリンクは削除されます。

指定された名前のファイルから閏秒情報を読み込みます。このオプションを使用しない場合、出力されるファイルには閏秒情報は含まれません。これは一部の TZif リーダーで必要とされます。
入力に次の形式のリンク行が含まれているかのように動作します。

Link timezone posixrules

timezone が “-” (既定値)の場合、既存のリンクはすべて削除されます。

timezone が “-” でない限り、このオプションは廃止され、ほとんどのランタイムでサポートされなくなりました。特に、2037年以降のタイムスタンプには使用すべきではありません。また、timezone の遷移が現地時間ではなく標準時または UT である場合は、-b slim と組み合わせるべきではありません。このオプションは、遷移ルールのない "AST4ADT" のような廃止された TZ 文字列を処理するときにtimezone のルールを使用した廃止されたランタイムをサポートするためにのみ存在します。これらの TZ 文字列をサポートする最新のランタイムは、 TZ 文字列が主に米国で使用されていたため、通常は現在の米国のルールを使用します。同様に、"posixrules"という名前のゾーンまたはリンクは廃止され、問題があります。

指定されたファイルモードビットで TZif ファイルを作成します。既定値では、ファイルは umask で変更されたモード 644 で作成されます。このオプションを使用すると、ファイルは指定されたモードで作成されます。移植性のために、モードは符号なし 8進整数、通常は 644 または 444 である必要があります。一部のプラットフォームでは、chmod(1) スタイルのシンボリックモードもサポートされています。このオプションは、umask で変更されたモード 755 を持つ、作成された上位 (ancestor)ディレクトリには影響しません。このオプションは、ファイルモードビットの概念を持たないプラットフォームでは無視されます。
出力ファイルの適用範囲を lo (含む)から hi (含まない)までの範囲のタイムスタンプに制限します。lo と hi は紀元 (1970-01-01 00:00:00 UTC) からの秒数の符号付き10進数です。省略されたものは既定値を極値までカウントします。出力ファイルでは、省略されたタイムスタンプデータの代わりに UT オフセット 0 と省略形 “-00” が使用されます。たとえば、 “zic -r @0” は負のタイムスタンプ(紀元前)用のデータを省略し、 “zic -r @0/@2147483648” は 31ビットの符号付き整数に収まる非負のタイムスタンプ用のデータのみを出力します。 GNU date のあるプラットフォームでは、 “zic -r @$(date +%s)” は過去のタイムスタンプ用のデータを省略します。このオプションは通常、出力ファイルのサイズを縮小しますが、タイムスタンプ範囲の境界を表す必要があるため、サイズが大きくなることがあります。特に hi によって TZif ファイルに hi 以前の遷移の明示的なエントリが含まれるようになり、proleptic TZ 文字列で簡潔に表されなくなった場合は、サイズが大きくなることがあります。また、出力サイズを縮小する別の方法については、-b slim オプションも参照してください。
エポックから hi 秒未満に発生したタイムスタンプに対して、冗長な末尾明示的遷移を生成します。これは、遷移が予測的 TZ 文字列を介してより簡潔に表現できる場合でも同様です。このオプションは、表現されるタイムスタンプには影響しません。予測的 TZif 文字列を無視する非標準の TZ リーダーにも対応しますが、変更された出力ファイルのサイズが増加します。
現地時間情報を作成するときは、標準の場所ではなく、指定されたファイルに設定リンクを配置します。
出力された通常のファイルのオーナーとグループを指定されたものに変更します。owner は、ユーザー名、符号なし 10進整数ユーザー ID、またはオーナーに変更がないことを意味する空の文字列のいずれかです。group は、グループ名と ID に類似しています。このオプションは、ディレクトリ、ハード・リンクまたはシンボリック・リンクには影響しません。通常、所有権を変更するには特別な権限が必要であり、オーナーとグループの概念がないプラットフォームでは無視されます。
もっと冗長になり、次のような状況について表示します:

入力はリンクへのリンクを指定しますが、これは zic 自体からリリース 2022e までを含む一部の古いパーサーではサポートされていません。

データファイルに表示される年は、表示可能な年の範囲外です。

24:00 以上の時刻が入力に表示されます。1998 より前のバージョンの zic では24:00 が禁止されており、2007 より前のバージョンでは 24:00 を超える時刻が禁止されています。

月の初めまたは終わりを過ぎたルール。2004 より前のバージョンの zic では、これは禁止されています。

タイムゾーンの省略形は %z 形式を使用します。2015 より前のバージョンの zic はこれをサポートしていません。

タイムスタンプには小数秒が含まれます。2018 より前のバージョンの zic はこれをサポートしていません。

入力には、長年のコーディングバグのために 2018 以前のバージョンの zic で誤って処理される略語が含まれています。これらの略語には、 “Link” の場合は “L” 、 “min” の場合は “mi” 、 “Sat” の場合は “Sa” 、 “Sun” の場合は “Su” が含まれます。

将来は TZ の予兆文字列としてまとめることができないため、出力されるファイルには、あるタイムゾーンの長期的な将来に関するすべての情報が含まれているわけではありません。例えば、 2023 の時点では、この問題は夏時間規則で発生します。これらの規則は、TZ の予兆文字列では表現できない、ラマダンがいつ行われるかの予測に基づいているからです。

出力には、古い zic 形式用に設計されたクライアント・コードでは適切に処理できない可能性のあるデータが含まれています。これらの互換の問題は、 1970 前または 2038 開始後のタイムスタンプにのみ影響します。

出力には切り捨てられた閏秒テーブルが含まれているため、一部の古い TZif リーダーでは誤動作が発生する可能性があります。これは、-L オプションが使用され、Expires 行が存在するか、-r オプションも使用されている場合に発生する可能性があります。

出力されたファイルには、一部のクライアントで誤って処理される可能性のある 1200 遷移以外の遷移が含まれています。現在のリファレンスクライアントは、ほとんどの 2000 遷移をサポートしていません。2014 より前のバージョンのリファレンスクライアントは、ほとんどの 1200 遷移をサポートしています。

タイムゾーンの省略形が 3文字未満または 6文字を超えています。POSIX では少なくとも 3文字が必要であり、実装では少なくとも 6文字をサポートする必要があります。

出力されたファイルに、ASCII 文字ではないバイト “-” 、 “/” 、または “_” が含まれているか、14 バイトより長い文字で構成されるか、または “-” で始まるファイルが含まれています。

ファイル

入力ファイルにはこのセクションで説明する形式を使用し、出力ファイルには tzfile(5) 形式を使用します。

入力ファイルはテキストファイルである必要があります。つまり、0個以上の行で構成され、それぞれが改行バイトで終わり、改行をカウントする最大 2048 バイトを含み、NUL バイトを含まないものである必要があります。入力テキストのエンコーディングは通常 UTF-8 または ASCII です。 POSIX Portable Character Set(PPCS) の1バイト表現を持つ必要があります。また、エンコーディングの非1バイト文字はすべて非 PPCS バイトで構成する必要があります。非 PPCS 文字は通常、コメント内でのみ使用されます。出力ファイル名とタイムゾーンの省略形にはほとんどすべての文字を含めることができますが、-v オプションで説明されている制限された構文に限定されている場合は、他のソフトウェアの方がうまく動作します。

入力行は、フィールドで構成されます。各フィールドは、1つ以上の空白文字で区切られます。空白文字は、スペース、フォーム・フィード、キャリッジ・リターン、改行、タブおよび垂直タブです。入力行の先頭と末尾の空白は無視されます。入力内の引用符で囲まれていないシャープ文字 (#) は、そのシャープ文字が表示される行の末尾までコメントになります。空白文字およびシャープ文字をフィールドの一部として使用する場合は、二重引用符 (¥") で囲むことができます。(コメント・ストリッピング後の)空白の行は無視されます。空白でない行は、ルール行、ゾーン行およびリンク行の3つのタイプのいずれかであると想定されます。

名前は英語で指定する必要があり、大文字と小文字は区別されません。名前は様々なコンテキストで使用され、月名、曜日名および maximum、only、 Rolling、 Zone などのキーワードが含まれます。先頭の接頭辞以外をすべて省略して名前を短縮することもできますが、どの省略形もコンテキスト内で一意である必要があります。

ルール行の書式は以下のようなものです。


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

例:

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

ルール行を構成するフィールドは以下の通りです:
この行を含むルール・セットの名前を指定します。名前は、ASCII 数字、 “-” 、 のいずれでもない文字で始まる必要があります。将来の拡張を可能にするために、引用符のない名前には次の文字を含めることはできません “!$%&'()*,/:;<=>?@[\]^`{|}~”. ".q !$%&'()*,/:;<=>?@[\]^`{|}~ 。"
ルールが適用される最初の年を指定します。任意の符号付き整数の年を指定できます。グレゴリオ暦では、 0年が 1年の前にあると想定されます。ルールは、時間値として表現できない時間を記述できますが、表現できない時間は無視されます。これにより、時間値のタイプが異なるホスト間でルールを移植できます。
このルールが適用される最後の年を与えます。minimum と maximum (上述) に加え、 only (またはその短縮) を用いることができ、この場合は FROM フィールドに指定した値と同じ値が用いられます。
-
予約フィールドであり、古いバージョンの zic との互換性のために常に “-” を含む必要があります。これは以前は TYPE フィールドとして知られていました。このフィールドには、ルールが適用される年の “types” をさらに制限する値を別のスクリプトで含めることができます。
ルールが有効になる月を指定します。月名は前述のように短縮することができます。たとえば、1月は “January” 、 “JANU” または “Ja” と表示できますが、 “j” とは表示できません。 “j” は、6月と 7月の両方とあいまいになります。
ルールが効力を持つ日の名前を指定します。以下のような書式を認識します:

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

曜日名(例: Sunday) または曜日名の前に “last” が付いている場合 (例:lastSunday)は、前述のように省略できます。たとえば、日曜日は “Su” 、最後の土曜日は “lastsa” です。ON フィールドには空白文字を使用できません。 “<=” および “>=” 構文は、結果として次の月の日になることがあります。たとえば、IN-ON の組み合わせ は、10月31日以降の最初の日曜日を表します。その日曜日が 11月であっても同様です。

カレンダ日の開始時刻である 00:00 を基準として、ルールが有効になる時刻を指定します。認識されるフォームは次のとおりです。

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 は時間を最も近い整数秒に丸めますが(偶数整数とのタイを破ります)、分数はより高い精度を必要とする他のアプリケーションに役立つ場合があります。ソースフォーマットは最大精度を指定しません。これらの形式の後には、指定された時間がローカルまたは “wall clock” 時間の場合は文字 w 、指定された時間が夏時間の調整なしの標準時間の場合は s 、指定された時間が世界時の場合は u (または g または z)を続けることができます。インジケータがない場合は、ローカル(ウォールクロック)時間が想定されます。これらの形式は AT 秒を無視します。たとえば、うるう秒がローカル時間の 00:59:60 に発生した場合、 “1:00” は通常 の3600秒ではなく、ローカル深夜 0時から 3601秒を表します。その意図は、ルール行が、「閏秒」フィールドで指定された時間のタイプに設定されたクロック/カレンダが、指定された日時を表示する瞬間を記述することです。

ルールが有効な場合にローカル標準時に追加する時間の長さと、追加後の時間が標準時であるか夏時間であるかを示します。このフィールドは、 AT フィールドと同じ書式を持ちますが、標準の場合は s 、夏時間の場合はdという接尾辞のセットが異なります。通常、接尾辞は省略され、オフセットが 0の場合は既定値から s 、それ以外の場合は d となります。負のオフセットも使用できます。たとえば、アイルランドでは、夏時間が冬に適用され、アイルランド標準時と比較して負のオフセットがあります。オフセットは標準時に追加されるだけです。たとえば、 zic は10:30 標準時 に 0:30 SAVE を加算、10:00 標準時 に 1:00 SAVE を加算したものとを区別しません。
このルールが有効な場合に使用されるタイムゾーン省略形の “variable part” (たとえば、 “EST” または 内の “S” または “D” )を指定します。このフィールドが “” の場合、変数部分は NULL です。

ゾーン行の書式は以下のようなものです。

Zone	NAME	STDOFF	RULES	FORMAT	[UNTIL]

例:

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

ゾーン行を構成するフィールドは以下の通りです:
タイムゾーンの名前です。これは、タイムゾーンの時間変換情報ファイルを作成するときに使用される名前です。ファイル名コンポーネント “.” または “..” を含めることはできません。ファイル名コンポーネントは、 “/” を含まない最大部分文字列です。
夏時間の調整を行わずに標準時間を取得するために UT に追加する時間です。このフィールドは、サフィックス文字がないことを除いて、ルール行の AT および SAVE フィールドと同じ形式です。UT から時間を減算する必要がある場合は、フィールドをマイナス記号で開始します。
タイムゾーンに適用されるルールの名前、または rule-line SAVE フィールドと同じ形式のフィールド。ローカル標準時間に追加される時間の長さ、および結果の時間が標準であるか夏時間であるかを示します。基準時刻は、このフィールドが - の場合、またはルールが有効になる前に発生するタイムスタンプの場合に適用されます。時間の長さが指定されている場合は、標準時間とこの時間の合計のみが問題になります。
タイムゾーンの略称の書式です。文字 %s は、対応するルールの LETTER/S フィールドから取得されたタイムゾーンの略称の可変部分を配置する場所を示します。最も古いルールに先行するタイムスタンプは、最も古い標準時ルールの LETTER/S を使用します(この場合は存在する必要があります)。最も古いルールに先行するタイムスタンプは、最も古い標準時ルールの LETTER/S を使用します(この場合は存在する必要があります)。最も古いルールに先行するタイムスタンプは、最も古い標準時ルールの LETTER/S を使用します(この場合は存在する必要があります)。または、スラッシュ (/) で標準と夏時間の略称を区切ります。POSIX に準拠するには、タイムゾーンの略称には、英数 ASCII 文字、 “+” および “-” のみを含める必要があります。標準では、タイムゾーンの略称 “-00” は、現地時間が指定されていないことを意味するプレースホルダです。
UTC に対するオフセットか、その場所におけるルールが変更される時刻です。 年・月・日・時刻で指定します。これが指定された場合には、タイムゾーンの情報は与えられている UTC オフセットから生成され、ルールは指定時刻になると変更されます。月・日・時刻は、ルールの IN, ON, AT カラムと同じ書式で指定します。この後に続くカラムは省略できます。省略されたカラムに対しては、 可能性のあるもののうち最も早い値がデフォルトで用いられます。
次の行は “継続” 行である必要があります。これはゾーン行と同じ形式ですが、文字列 “Zone” と名前が省略されている点が異なります。継続行は、前の行で使用されているファイル内の前の行に、 “until” 情報として指定された時刻から始まる情報を配置します。継続行には、ゾーン行と同様に “until” 情報を含めることができます。これは、次の行がさらなる継続であることを示します。

前のゾーンまたは継続行でルールが有効になるのと同じ時点でゾーンが変更された場合、そのルールは無視されます。名前付きルール・セットを持つゾーンまたは継続行の L は、既定値別の標準時で始まります。つまり、L の最初のルールより前の L のタイムスタンプはすべて、L が標準時に最初に移行した後に有効になるルールを使用します。1つのゾーン内で、2つのルールが同時に有効になった場合、または 2つのゾーンの変更が同時に有効になった場合はエラーになります。

継続行の N オフセットとルールを使用している場合に、より遅いと解釈される遷移の後で、継続行が UT オフセットから UT 秒を引いた場合、前のゾーンまたは継続行の “until” 時間は、継続行の UT オフセットとルールに従って解釈され、次の N 秒で有効になるルールは、代わりに同時に有効になると想定されます。次に例を示します:


# Rule NAME FROM TO - IN ON AT SAVE LETTER/S Rule US 1967 2006 - Oct lastSun 2:00 0 S Rule US 1967 1973 - Apr lastSun 2:00 1:00 D # Zone NAME STDOFF RULES FORMAT [UNTIL] Zone America/Menominee -5:00 - EST 1973 Apr 29 2:00 -6:00 US C%sT
ここでは、1973-04-29 に 2回のクロック変更があったという誤った解釈があります。1回目はゾーン行の “until” 値に従って 02:00 EST (-05) から 01:00 CST (-06) へ、2回目は 4月のルール行の値に従って 1時間後の 02:00 CST(-06) から 03:00 CDT (-05) への変更です。ただし、 zic はこれを 02:00 EST (-05) から 02:00 CDT (-05)への単一の移行としてより合理的に解釈しています。

リンク行の書式は以下のようなものです。

Link	TARGET	LINK-NAME

例:

Link	Europe/Istanbul	Asia/Istanbul

TARGET フィールドは、ゾーン行では NAME フィールドとして表示されるか、リンク行では LINK-NAME フィールドとして表示されます。LINK-NAME フィールドは、そのゾーンの別名として使用されます。構文は、ゾーン行の NAME フィールドと同じです。リンクは連鎖できますが、1つ以上のリンクの連鎖がゾーン名で終了しない場合の動作は指定されていません。リンク・ターゲットを定義する行の前に、リンク行を表示できます。次に例を示します:


Link Greenwich G_M_T Link Etc/GMT Greenwich Zone Etc/GMT  0  -  GMT
2つのリンクはチェーンされ、G_M_T、Greenwich、Etc/GMT はすべて同じゾーンに名前を付けます。

継続行を除き、行は入力内で任意の順序で出現できます。ただし、複数のゾーンまたはリンク行が同じ名前を定義した場合の動作は指定されていません。

閏秒を記述するファイルには、閏行と有効期限行を含めることができます。閏行の形式は次のとおりです:


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 フィールドは、他のフィールドで指定された閏秒が UTC として解釈される場合は “Stationary” の省略形になり、他のフィールドで指定された閏秒がローカル(壁時計)時間として解釈される場合は “Rolling” の省略形になります。

ローリングうるう秒は、 “3... 2... 1... leap... Happy New Year” カウントダウンがある、タイムズスクエアのボールが落ちる所で見ることができ、閏秒を UTC の真夜中ではなくニューヨーク時間の真夜中に配置します。移動しない閏秒が一般的な方法ですが、ローリング閏秒は、ローカルでの放送終了時に閏秒の不連続性を置くことを好む SMPTE タイムコードのような特殊なアプリケーションで有用です。ただし、-r オプションが使用されている場合、ローリング閏秒はサポートされません。

有効期限行は、存在する場合、次の形式になります:


Expires	YEAR	MONTH	DAY	HH:MM:SS

例:

Expires	2020	Dec	28	00:00:00

YEAR、MONTH、DAY、および HH:MM:SS フィールドは、閏秒テーブルの有効期限タイムスタンプを UTC で示します。

拡張された 例

以下は zic 入力の拡張例で、その機能の多くを説明することを意図しています。


# Rule NAME FROM TO - 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

この例では、EU 規則は欧州連合 (EU) とその先行組織である欧州共同体 (EC) に適用されます。タイムゾーンの名前は Europe/Zurich で、別名は Europe/Vaduz です。この例では、Zurich は 1853-07-16の00:00 まで UT の東 34分 8秒にあり、このとき有効なオフセットは 7degrees26分22.50秒 に変更され、0:29:45.50 になります。zic はこれを 0:29:46 に丸めて処理します。1894-06-01 の 00:00 以降、UT オフセットは 1時間になり、スイスの夏時間規則 ( “Rule Swiss”) が適用されます。1981年から現在まで、EU の夏時間規則が適用され、UTC オフセットは1時間のままです。

1941年と 1942年には、夏時間は 5月の第 1月曜日の 01:00 から 10月の第 1月曜日の 02:00 まで適用されました。1981 年以前の EU 夏時間規則はここでは効果がありませんが、完全性のために含まれています。1981年以降、夏時間は 3月の最後の日曜日の 01:00 UTC に開始されました。1995年までは 9月の最後の日曜日の 01:00 UTC に終了していましたが、これは 1996年から 10月の最後の日曜日に変更されました。

表示の目的で、 “LMT” と “BMT” がそれぞれ最初に使用されました。スイスの規則とその後の EU の規則が適用されて以来、タイムゾーンの省略形は、標準時は CET、夏時間は CESTとなっています。

ファイル


/etc/localtime
既定のローカルタイムゾーンファイル。
/usr/share/zoneinfo
既定のタイムゾーンの情報ディレクトリ

注意

二つ以上のローカルタイムを持っている地域では、 ローカルな標準時を 最も早い方の時刻変換ルールの AT フィールドに用いる必要があるでしょう。そうしないとコンパイルされたファイルに記録された最も早い変換時刻が 正しいことが保証されません。

特定のタイムゾーンで、夏時間の開始によるクロックの進みが、UT オフセットの変更によるクロックの戻りと一致し、等しい場合、zic は、ローカル(壁時計)時間の変更なしに、新しい UT オフセットで夏時間への単一の移行を生成します。個別の移行を取得するには、世界時を使用して移行の瞬間を指定する複数のゾーン継続行を使用します。

関連項目

tzfile(5), zdump(8)

タイムゾーンデータベース