Unix 時間と ISO 8601 の書き方
SI 外の単位 · 量:1970 年からの整数秒として表す時刻
2038 年 1 月 19 日、世界時で三時十四分七秒に、三十二ビット幅の秒計数器は 2 147 483 647 に達する — それが収めうる最大の数である。次の刻みが最上位のビットを持ち上げ、同じ二進の語がこれより負として読まれる:まさにこの数えで時を保つ時計は、2038 年ではなく 1901 年の十二月に身を置くことになる。遠い未来の珍事ではない — 産業用の制御器や水道の計器は、残る十二年より長く働くのだから。
この数えはきわめて簡素に組まれている:秒は 1970 年 1 月 1 日の真夜中から次々と流れ、そこでの一日は常にちょうど 86 400 秒を含む。まさにその簡素さが、二つの特質の源である。一方では、数からただちに暦の日付が導かれ、逆もまた然りであるから、あらゆる出来事の記録も、あらゆるデータベースも、あらゆるファイル系も、時をこれで保つ。他方では、閏秒をこのような数えで表すことはまったくできない。すなわちこれは名に反して秒ではなく、端数を伴う日を番号づけているのであり、実のところ UTC の書き方の一次関数であって、経過した時間の計数器ではない。
01 · 定義
Unix 時間とは、協定世界時で 1970 年 1 月 1 日の真夜中から経過した秒の数である。ただし各日がちょうど 86 400 秒を含むという前提のもとに。ISO 8601 の書き方は同じことを別のしかたで述べる:暦の日付、その日の時刻、そして本初子午線からの時差の表示によって。各欄は厳密に粗いものから細かいものへと並ぶ。
86 400 秒という但し書きは些事ではなく、定義の中で最も要となるところである。地球の自転を扱う機関が告げる閏秒を、この数えは受け入れられない。ゆえに挿入の瞬間、系は同じ値を二度繰り返すか、時計を戻すかする。ここから大事なことが導かれる:二つの出来事のあいだに挿入が落ちていたなら、二つの unix の数の差は、そのあいだに実際に経過した秒の数ではない — 原子時系とのずれはすでに二十七秒まで積もっている。
一方、限界は定義にではなく、保存の幅による。符号付き三十二ビットが与える最大の値は 2 147 483 647 で、それは 2038 年 1 月 19 日に当たる。次の増分は最上位のビットを一とし、数を負に変え、時計を 1901 年 12 月 13 日へと投げ返す。六十四ビットはこの境を二千九百二十億年ほど先へ押しやるが、その同じ六十四ビットの中の整数ナノ秒は、すでに 2262 年に尽きてしまう。
規格に沿う書き方は別の務めを果たす — 保存ではなく交換である — ゆえにそこでは、数がまったく持たぬものが重みを持つ:時差、日付と時刻を隔てる記号、そして文字列の長さが等しければ辞書順が時間順と一致するという規則である。まさにこの最後の性質が、この形式をファイル名と記録における並べ替えの土台とした。
つまみで時を送り、レジスタが満ちてゆくさまをご覧ください:ビットは右から左へ灯り、最上位の、符号のビットが暗いままであるかぎり、数は正であり日付は伸びてゆく。計数器が 2 147 483 647 を越えたとたん、最上位のビットが赤く燃え、数の全体が負となり、時計は 1901 年へ跳ぶ。
緑の直線は原子時系であり、そこでは一秒一秒がまことに一秒である。赤い階段の線は Unix 時間で、挿入のたびに同じ印を二度差し出すため、線はその場に立ち止まる。ずれはすでに二十七秒に達し、なお増えている。ゆえにこの数えは暦の日付には足りるが、物理における持続の測りには足りない。
02 · 換算
タイムスタンプか日付を入力してください
数えのすべての倍数のあいだ — 秒、ミリ秒、マイクロ秒、ナノ秒 — 換算は正確である。互いに係数ひとつしか違わぬのだから。近似なのはただ一行:原子時系への換算には、与えられた時刻までに閏秒がいくつ積もったかを知らねばならない。
規格に沿う文字列の読み解きを、この票は Z を伴う拡張形で行う。区切りを伴わぬ基本形は細かな設定に移してある。
2038 年の難題は規格にではなく、機器と古いコードの中にある:三十二ビットの印は計器の組み込みプログラムの中に、産業用の制御器の中に、ファイル系の形式の中に、そして欄がすでに四バイトと宣言されたデータベースの中に居座っている。原本で型を変えるのは十分たやすい。だが残る十二年で幾百万もの据え付けられた機器を巡るのは、2000 年の前に立ちはだかったのと同じ種類の務めである。
| 値 | 注記 | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · 桁の並び
対数目盛:一秒から六十四ビットの限界まで04 · 測定器
出来事に印を押すのは何か
電池を備えた別の集積回路が、機器の切れているあいだも数えを保つ。それが蓄えるのはたいてい unix の印ではなく、暦の各欄を別々にである。しかもその年の欄の幅は独自のものであるから、古い基板では 2038 年の話がまずこの問いから始まる:その集積回路自身は何年まで数えるのか。
NTP の取り決めは機械の時計を共通の時に、数ミリ秒の精度で合わせる。そして同じそれが、挿入を専用の旗で一日前に告げる。それ自身の境もあり、しかもそちらが先に来る:数えは 1900 年から符号なし三十二ビットで流れ、2036 年の二月に溢れる。
記録に印を書くには、数によるか、規格に沿う文字列によるかである。後者が優るのはまさに一つの理由による:長さの等しい文字列では辞書順が時間順と一致し、日付を読み解かずとも各項が並ぶ。まさにそれゆえ、この形式は計算技術のはるか外へと広まった。
ある機器が 2038 年に備えているかを試すすべは一つきりである — その時計をあの不吉な境の向こうへ進め、記録と証明書と間隔の計算がどうなるかを見ることである。こうしてすでに、料金の算定にも、入退の管理系にも、鍵の有効期限にも破綻が見出された。そこでは未来の日付が加算によって作られ、境そのもののはるか手前で溢れるのである。
05 · 表記の規則
粗いものから細かいものへ、そして常に時差とともに
規格は各欄を降る順に並べること、年を四桁とすること、日付の区切りに連字符を用いること、時刻の前に文字 T を置くことを求める。時差は本初子午線には文字 Z で、あるいは正負の時と分として示す。unix の印は整数で、位を区切らずに書き、倍数は必ず明示せねばならない。千という係数が秒とミリ秒を隔てるのに、数の大きさだけでは両者はたやすく取り違えられるからである。
第一の書き方は国ごとに読みが異なり、ゆえに資料の交換には容れられない。第二は区切りも時差もともに落とすので、時刻は前後に一日ずつ定まらぬままとなる。第三は先頭の零を失い、文字列は辞書順に並ばなくなる — しかしこの形式が重んじられるのは、まさにその性質のゆえである。第四は unix の数えと原子時系のあいだに等号を置くが、両者のあいだには積もった二十七秒の挿入が横たわっている。
06 · 隣り合う単位
傍らには、同じ原理で組まれ、ただ起点だけが異なるすべての数えが並ぶ:NTP 時間は 1900 年から、ユリウス日は西暦前 4713 年の正午から、衛星系の時系は 1980 年一月から。異なるのは紀元と単位だけであるから、定数を引けば換算できる。
符号付きの秒
その限界はすでに 2036 年に来る
閏秒を正直に数え入れる
Simetrium の 要覧のうち 隣に並ぶのは ユリウス日、換算の定数はそこから採られている、 UTC・TAI・UT1 の各時系、消えた閏秒を説き明かすもの、 秒 数えの単位として、また ビット、その幅こそが限界を定める。
07 · 歴史の部
ビットの不足から選ばれた紀元
はじめの Unix の手引では、時間は 1971 年の初めから秒の六十分の一で数えられており、三十二ビットではそのような数えがようやく二年ほどしか収まらなかった。あまりに速く尽きるので、系を出すたびに紀元を動かさねばならぬところであった。そこで秒の端数を捨て、整数の秒に改めた。
整数の秒に移ったことで、作り手たちは百三十六年の余裕を得、起点を必要にではなく便宜によって選べるようになった。取られたのは 1970 年 1 月 1 日 — 過去でいちばん近いきりのよい日付で、機械の記録はどのみちそこまで届かなかった — 以来ただの一度も改められていない。系そのものは幾度も根本から書き直されたにもかかわらず。
国際標準化機構は分かれてゆく各国の形式を一つにまとめ、その土台に簡素な規則を据えた:各欄は粗いものから細かいものへ、いずれも先頭の零を伴う。副次の効きめが当初の狙いより重くなった — そうした文字列は数のように並ぶので、この形式はファイル名にも記録にも交換の取り決めにも広まった。
卓上の系も伺候の系もとうに六十四ビットへ移り、そこでは境がいかなる分別ある見通しの外へも押しやられている。危うさは別のところに残った:二十年の寿命を持つ計器の組み込みプログラムに、欄が四バイトと宣言されたファイルの形式に、そして将来の期限の計算に。今日の日付に十五年を加えれば、それはもう今日にも溢れるのである。
名に反して秒を数えない数え
Unix 時間の定義は秒の数えのように聞こえる。だが一日きっかり 86 400 秒という求めが、それを別のものに変える:UTC の書き方の一次関数であって、経過した時間の尺度ではない。地球の自転を扱う機関が挿入を告げるたび、数えは同じ値を二度繰り返すか、後ろへ跳ばねばならず、二つの印の差からはまさにその一秒が失われる。半世紀のあいだにそうした損失が二十七も積もった。ゆえにまことの持続を要する務めには、この時系ではなく原子時系が取られる。
第二の特質は定義の中にはまったくなく、保存のしかたの中にある。そしてこれこそが、それを我らが目録において、自然でも取り決めでもなく、機械の語の幅が定めた唯一の限界としている。ユリウス日は決して終わらない、それが数だからである。Unix 時間は 2038 年 1 月 19 日に終わる、それが四バイトの欄だからである。量とその表しかたとの違いは、ふだん計量の人々をあまり煩わせぬものだが、ここではまさにそれがすべてを決めている。
カタログ · 測定単位
それぞれの量に一つの要覧
SI 基本単位が七つ、固有の名を持つ組立単位が二十二、そして技術も暦も成り立たない体系外の量。