タイムスタンプツール

タイムスタンプの知識

時間計算の基礎


一、Unix タイムスタンプ:世界共通の「時間言語」

定義
Unix タイムスタンプ(Unix Timestamp)は、1970年1月1日 00:00:00 UTC からの経過秒数(うるう秒を除く)です。これは、コンピュータシステムにおけるプラットフォームやタイムゾーンに依存しない時間表現の標準です。

権威ある定義の出典

  • POSIX 標準 (IEEE Std 1003.1-2017)1 によると、Unix タイムスタンプは「エポック(Epoch)からの秒数」として定義されています。
  • Linux time.h マニュアルページ2 では、そのデータ型を time_t(通常は符号付き32ビットまたは64ビット整数)と定義しています。

主要な特徴

  1. タイムゾーン非依存:同じ時点での Unix タイムスタンプは、世界中どこでも同じ値です。
    例:2023-10-01 08:00:00(UTC+8)と UTC 時間 2023-10-01 00:00:00 のタイムスタンプは、どちらも 1696118400 です。
  2. うるう秒の無視:うるう秒の調整を含まないため、国際原子時(TAI) との間に約27秒の差があります(2023年時点)3
  3. 32ビットの制限:32ビットタイムスタンプは2038年1月19日にオーバーフローしてゼロに戻ります(「2038年問題」)[^4]。

二、GMT と UTC:天文観測から原子時計へ

GMT(グリニッジ標準時)UTC(協定世界時) は、よく混同されますが、本質的な違いがあります:

観点GMT(Greenwich Mean Time)UTC(Coordinated Universal Time)
定義地球の自転(天文観測)に基づく原子時計(セシウム原子の振動周期)に基づき、GMT との誤差は0.9秒以内
調整定期的な校正なしうるう秒(Leap Second)により地球の自転と同期4
管理機関元はグリニッジ天文台が定義、現在はタイムゾーン識別子(UTC+0)として使用国際電気通信連合(ITU)5国際度量衡局(BIPM)[^7] が管理

重要な事実

  • GMT の衰退:1972年に UTC が GMT に代わって国際標準時となりました[^8]が、"GMT" は依然として UTC+0 タイムゾーンを表す用語として広く使用されています。
  • タイムゾーン略称の規則IANA タイムゾーンデータベース6によると、Etc/UTCEtc/GMT は両方とも零時間帯を表しますが、後者は符号が逆になります(例:GMT+1 は実際には UTC-1 を表します)。

三、タイムゾーン変換:タイムスタンプからローカル時間へ

タイムスタンプ → ローカル時間の変換式
ローカル時間 = Unix タイムスタンプ + タイムゾーンオフセット + うるう秒補正

権威あるツールと標準

  1. IANA タイムゾーンデータベース(旧 Olson データベース)6
    • 世界中のタイムゾーンルールを含む(例:Asia/Tokyo は UTC+9 を表す)
    • Linux、macOS、Java などのシステムにデフォルトで統合
  2. ISO 8601 標準[^10]:
    • 時間フォーマット YYYY-MM-DDTHH:mm:ss±HH:mm(例:2023-10-01T08:00:00+09:00)を規定
  3. RFC 33397
    • インターネット時間フォーマットを定義(ISO 8601 互換)、明示的なタイムゾーンオフセットを要求

サンプルコード(Python)

import datetime

timestamp = 1696118400
# UTC 時間への変換
utc_time = datetime.datetime.utcfromtimestamp(timestamp)  # 2023-10-01 00:00:00
# 日本時間(UTC+9)への変換
local_time = datetime.datetime.fromtimestamp(timestamp, datetime.timezone(datetime.timedelta(hours=9)))  # 2023-10-01 09:00:00+09:00

四、うるう秒:タイムスタンプの「例外処理」

うるう秒のメカニズム

  • 国際地球回転・基準系事業(IERS)4 が地球の自転変化に基づいてうるう秒の挿入を決定(通常6月または12月31日)
  • 2023年時点で、UTC と TAI の累積うるう秒差は 37秒3

システムの互換性

システム/言語うるう秒の処理方法公式ドキュメント
Linuxカーネルがうるう秒の挿入をサポート、手動設定が必要Linux Kernel うるう秒処理
Javajava.time API はうるう秒を無視Oracle Java Docs
Google 公開 NTPうるう秒挿入時に「うるう秒スメアリング」戦略を採用Google うるう秒スメアリング

五、権威ある参考資料


六、まとめ

  • Unix タイムスタンプはクロスタイムゾーンプログラミングの基礎であり、2038年のオーバーフロー問題に注意が必要です。
  • UTC は現代の国際標準時、GMT はタイムゾーン識別子(UTC+0)としてのみ使用。
  • タイムゾーン変換は IANA データベースに依存し、うるう秒処理は IERS 公告を参照。

これらの概念を理解することで、金融取引やログ同期などの重要なシステムで時間ロジックを正確に制御できます。

Footnotes

  1. POSIX 時間標準: IEEE Std 1003.1-2017

  2. Linux time.h マニュアルページ: ターミナルで man 3 time を実行

  3. 国際度量衡局(BIPM)うるう秒公告: TAI-UTC 履歴 2

  4. 国際地球回転・基準系事業(IERS): うるう秒公告 2

  5. 国際電気通信連合(ITU): UTC の定義

  6. IANA タイムゾーンデータベース: 公式リポジトリ 2

  7. RFC 3339 時間フォーマット: RFC 3339 仕様