うるう秒の解説:UTC はどのように地球の自転と歩調を合わせるか
うるう秒は、原子時計の時刻を、減速していく地球の自転と合わせ続けるために UTC へ挿入される 1 秒の調整です。これまで大規模システムを停止させてきましたが、2035 年までに廃止される予定です。本ガイドでは、それが何か、Unix 時間がどう扱うか(ほとんどは無視)、そしてシステムが安全を保つための実践的なパターンを説明します。
1 分でわかるうるう秒
うるう秒は、時刻を UT1 から 0.9 秒以内に保つために UTC へ時折追加される追加の 1 秒です。UT1 は地球の実際の自転で定義される時刻です。原子時計は完全に一定の速さで刻みますが、地球は完全に一定の速さでは回らないため、両者はずれていき、再同期が必要になります。1972 年以降これらの挿入は 27 回あり、最後は 2016-12-31 で、世界の計量機関はこれを 2035 年までに廃止することを決議しました。重要なのは、Unix 時間はうるう秒を完全に無視するということです。下の表は主要な時系の関係を示します。
| 時系 | 基準 | うるう秒? | 備考 |
|---|---|---|---|
| TAI | 原子時計(SI 秒) | なし | 連続 — 2017 年以降 UTC より 37 秒先行 |
| UT1 | 地球の自転(天文) | — | UTC が近づけ続ける太陽時 |
| UTC | TAI を UT1 へ調整 | あり(〜2035 まで) | 世界の市民時間 |
| Unix 時間 | UTC、ただし 1 日 86,400 秒 | 無視 | アプリのコードが使うもの |
うるう秒とは何か
うるう秒は、UTC を UT1 から 0.9 秒以内に保つために UTC へ追加される追加の 1 秒です。UT1 は地球の自転に基づく天文時刻です。地球の自転は不規則で、長い時間スケールでわずかに減速しているため、原子的な UTC と自転的な UT1 はずれていき、再整合が必要になります。
- 1972 年から最後(2017-01-01)までに 27 回の正のうるう秒が挿入された
- 負のうるう秒は一度も起きていないが、地球が加速すれば理論的にはあり得る
- IERS の Bulletin C は、来たるうるう秒を少なくとも 6 か月前に告知する
- UTC の日のまさに末尾(23:59:60)に挿入され、通常は 6 月 30 日か 12 月 31 日
なぜうるう秒があるのか
UTC は 1972 年にハイブリッドとして再定義されました。SI 秒(原子)を、時折のうるう秒挿入によって UT1(天文)から 1 秒未満に保つというものです。目的は、どちらの純粋な系にも固定せずに、時刻と太陽時をおおまかにそろえ続けることでした。
- TAI:国際原子時、うるう秒のない純粋な SI 秒の計数(現在 UTC より 37 秒先行)
- UT1:自転時刻、地球姿勢の観測に基づく
- UTC:ハイブリッド — 原子の刻みを周期的に UT1 へ寄せる
- うるう秒がなければ、UTC と太陽は 1 世紀あたり約 1 分ずれていく
うるう秒と Unix 時間
POSIX の Unix 時間はうるう秒を無視するよう定義されています。Unix の 1 日はちょうど 86,400 秒です。うるう秒が起きると、システムごとに扱いは異なります——どれも Unix タイムスタンプを追加の 1 秒だけ増やしません。だからこそ、Unix/POSIX タイムスタンプは UTC に追随しますが、1970 年以降に経過した物理的な秒の真の計数ではありません。
- 厳密 POSIX:秒の番号が繰り返す — 23:59:59 が 2 回起き、どちらも同じ Unix タイムスタンプに対応
- 2012 年以前の Linux カーネル:厳密 POSIX を実装、多くのバグが表面化(Java、MySQL、Hadoop のハング)
- 現代の Linux カーネル:clock_settime() で調整を適用、ある実装は期間にわたってスミアする
- スミアリング:追加の 1 秒を数時間か 1 日に分散させ、どの 1 秒も繰り返されないようにする
Leap smearing(うるう秒スミアリング)
大規模な公開 NTP サービスの多くは、もはやうるう秒をそのままクライアントに渡しません。スミアします。追加の 1 秒を期間にわたって分散させ、その間クライアントの時計が UTC よりごくわずかに速く(負のうるう秒では遅く)進むようにします。結果として、どのクライアントも 23:59:60 を見ることはありません——厳密な UTC から一時的にずれる代償と引き換えに。
| プロバイダー | スミア期間 | 備考 |
|---|---|---|
| 24 時間、UTC 深夜を中心 | 約 11.6 µs/s の調整 | |
| AWS | 24 時間 | Amazon Time Sync Service |
| Meta(Facebook) | 17 時間 | — |
| Microsoft | 24 時間 | 2018 年以降 |
- スミアリングはスミア期間中、クライアントの壁時計が厳密な UTC と異なることを意味する——アプリ用途には問題ないが、高精度のタイミングには不向き
負のうるう秒はあり得るか?
これまでのうるう秒はすべて正——1 秒を追加——でした。しかし 2020 年ごろから地球は、過去半世紀の大半より少し速く回っており、かつて理論上だった負のうるう秒の見込みを一時的に高めました。1 秒を取り除き、23:59:58 の直後に 00:00:00 が続くというものです。それは史上初であり、繰り返しの秒を扱える多くのシステムが、いまだに飛ばされた秒を誤って扱います。最近の研究によると、極地の氷の融解が加速を緩め、負のうるう秒があるとしても 2029 年ごろまで先送りされる可能性があります——その頃には 2035 年の廃止が問題を無意味にしているかもしれません。
2035 年の廃止
国際度量衡総会(CGPM)は 2022 年 11 月に(決議 4 で)、遅くとも 2035 年までに UTC からうるう秒を廃止することを議決しました。この計画は ±0.9 秒の UT1 許容差をはるかに大きなものに置き換え、実質的に UTC が何十年もかけて太陽時からずれることを許します。
- 2022-11:CGPM 決議 4 — 2035 年に、またはそれ以前に、UT1−UTC の最大差を拡大
- 2023-11:ITU-R WRC-23 が計量の決定を正式に承認
- 廃止後、UTC は固定オフセットで TAI に結びついた純粋な原子時系になる
- 実装には、うるう秒処理のコードパスを段階的に廃止するために 2035 年までの猶予がある
関連リファレンス
FAQ
- うるう秒はこれまで何回ありましたか?
- 1972 年から 2017-01-01 までに 27 回の正のうるう秒が UTC に挿入されました。それ以降はありません。負のうるう秒は一度も起きていません。
- UTC と TAI の違いは何ですか?
- TAI はうるう秒のない連続した原子時間です。UTC は、地球の自転から 0.9 秒以内に保つためにうるう秒で調整された TAI です。2017 年以降、TAI は UTC のちょうど 37 秒先行しています。
- 負のうるう秒はあり得ますか?
- 可能ですが一度も起きていません。2020 年ごろから地球はわずかに速く回っており、原理的には秒を加えるのではなく取り除く必要が出るかもしれません。2035 年に予定されるうるう秒の廃止により、この問題は無意味になる可能性があります。
- 2035 年以降、Unix タイムスタンプはうるう秒を含みますか?
- いいえ。Unix 時間はうるう秒を数えたことがなく、今後も数えません。廃止後は UTC 自体が追加をやめるので、Unix 時間と UTC は単にそろったままになります。
- なぜ Reddit や Cloudflare はうるう秒の日にダウンしたのですか?
- Linux カーネルや Java ライブラリには 23:59:60 が発生したときに引き起こされるバグがありました——典型的には無限ループ、ロック競合、あるいは一部のコードパスでの「負の秒」による NaN 演算です。
- 現在の TAI−UTC の差はいくつですか?
- 37 秒です。これは 27 回のうるう秒(1972 年以降)に、UTC 定義時に設定された 10 秒の初期オフセットを加えたものです。