開発者向け

UNIX 時刻とうるう秒: POSIX 時間が「ズレ」を無視する理由

UNIX時刻 (エポック秒) はなぜうるう秒を考慮しないのか。POSIXの定義と、1日を常に86400秒とみなす仕組みを、実際のうるう秒挿入の歴史とあわせて解説します。

1日は本当に86400秒なのか

UNIX時刻 (UNIX time、POSIX時間) は「協定世界時 (UTC) の1970年1月1日午前0時0分0秒から経過した秒数」として広く説明されます。ここで多くの人が見落とすのが、「経過した秒数」の数え方です。UNIX時刻の仕様では、1日を機械的に86400秒 (60秒×60分×24時間) として数えると決められており、実際の地球の自転周期がそれよりわずかに長い・短いという事実を無視します。この「無視する」という設計判断こそが、UNIX時刻とうるう秒の関係を理解するうえでの出発点です。

POSIXの定義: うるう秒は数えない

UNIX系OSの標準仕様であるPOSIX (The Open Group Base Specifications、IEEE Std 1003.1) は、「Seconds Since the Epoch」という項目でUNIX時刻を次のように定義しています。

… measured in seconds since the Epoch … excludes leap seconds unless the implementation explicitly includes them … each and every day shall be considered to be exactly 86400 seconds long.

この一節は、UTCに実際に挿入されたうるう秒を特別な実装がない限りカウント対象から除外し、どの1日も例外なく86400秒として扱うことを明記しています。https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_16 つまりUNIX時刻は「本物のUTC秒の積み上げ」ではなく、「1970年1月1日からのカレンダー日数 × 86400秒」に近い、簡略化された時刻の数え方なのです。

そもそもうるう秒とは何か

地球の自転速度は潮汐力などの影響でわずかに変動しており、原子時計が刻む正確な1秒を基準にすると、1日の長さが86400秒からごくわずかにずれていきます。このズレが蓄積してUTCと天文時刻 (自転に基づく時刻) の差が最大0.9秒に近づくと、国際地球回転・基準系事業 (IERS) の判断でUTCに1秒を挿入・削除する調整が行われます。これが「うるう秒」です。1972年の導入以来、挿入のみが行われてきており、直近では2016年12月31日に挿入されたのが最後です。2017年以降は地球の自転がやや速まった時期もあり、新たなうるう秒は追加されていません。

うるう秒がある日、UNIX時刻はどう動くか

うるう秒が挿入される日、UTCの表記上は「23時59分60秒」が1秒だけ存在します。しかしPOSIXの定義に従う限り、その日も86400秒として数えるため、挿入された1秒はUNIX時刻の進み方に反映されません。具体的には次のようになります。

UTC表記 実際に起きていること UNIX時刻での扱い
2016-12-31T23:59:59 うるう秒挿入前の最後の1秒 ある秒数 n
2016-12-31T23:59:60 挿入されたうるう秒 (UTC上だけに存在) n のまま進まない、または実装により n を1秒だけ巻き戻して表現する
2017-01-01T00:00:00 うるう秒挿入後の最初の1秒 n + 1

この表のとおり、UNIX時刻の目線では「23時59分60秒」という瞬間は存在せず、1秒が重複するか繰り返されるかのどちらかの形で処理されます (具体的な処理方法はOSやNTP実装に委ねられています)。結果として、UNIX時刻の差分からそのまま実際の経過秒数 (原子時計基準) を計算すると、1972年以降に挿入された累積うるう秒数の分だけ、実際より少なく計算されることになります。

実務上なぜ問題になりにくいのか

一般的なアプリケーション開発では、この誤差を意識する場面はほとんどありません。理由は大きく2つあります。第一に、多くのシステムが扱う時間の精度は秒単位かそれより粗く、累積誤差が数十秒程度では実用上の支障が出にくいことです。第二に、Google や Amazon などの大規模事業者が運用するNTPサーバーでは「leap smear (うるう秒ならし)」という手法で、うるう秒の1秒を挿入日の前後でサーバー時刻をわずかに遅く進めることにより少しずつ分散して吸収し、システム時刻が逆行したり同じ秒が重複したりする事態を避ける運用が広く行われています。これにより、多くのサービスはうるう秒の存在をほぼ意識せずに済んでいます。

一方で、金融取引のタイムスタンプ記録やGPS時刻 (うるう秒を含まない独自の時刻系を持つ) との厳密な同期が必要な分野では、うるう秒の扱いの違いが無視できない問題になることがあります。このような高精度な時刻同期が必要な場面では、UTCとの差分が別途管理されているGPS時刻や、国際原子時 (TAI) を基準にした時刻系を使うなど、UNIX時刻とは別の仕組みで対応するのが一般的です。

まとめ

UNIX時刻と日時の相互変換は UNIX時刻 変換ツール で即時に試せます。

関連ツール

公開: 2026-10-13