タイムスタンプツール
タイムスタンプの知識
時間計算の基礎
一、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ビット整数)と定義しています。
主要な特徴:
- タイムゾーン非依存:同じ時点での Unix タイムスタンプは、世界中どこでも同じ値です。
例:2023-10-01 08:00:00(UTC+8)と UTC 時間 2023-10-01 00:00:00 のタイムスタンプは、どちらも1696118400
です。 - うるう秒の無視:うるう秒の調整を含まないため、国際原子時(TAI) との間に約27秒の差があります(2023年時点)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/UTC
とEtc/GMT
は両方とも零時間帯を表しますが、後者は符号が逆になります(例:GMT+1
は実際には UTC-1 を表します)。
三、タイムゾーン変換:タイムスタンプからローカル時間へ
タイムスタンプ → ローカル時間の変換式:
ローカル時間 = Unix タイムスタンプ + タイムゾーンオフセット + うるう秒補正
権威あるツールと標準:
- IANA タイムゾーンデータベース(旧 Olson データベース)6:
- 世界中のタイムゾーンルールを含む(例:
Asia/Tokyo
は UTC+9 を表す) - Linux、macOS、Java などのシステムにデフォルトで統合
- 世界中のタイムゾーンルールを含む(例:
- ISO 8601 標準[^10]:
- 時間フォーマット
YYYY-MM-DDTHH:mm:ss±HH:mm
(例:2023-10-01T08:00:00+09:00
)を規定
- 時間フォーマット
- 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
四、うるう秒:タイムスタンプの「例外処理」
うるう秒のメカニズム:
システムの互換性:
システム/言語 | うるう秒の処理方法 | 公式ドキュメント |
---|---|---|
Linux | カーネルがうるう秒の挿入をサポート、手動設定が必要 | Linux Kernel うるう秒処理 |
Java | java.time API はうるう秒を無視 | Oracle Java Docs |
Google 公開 NTP | うるう秒挿入時に「うるう秒スメアリング」戦略を採用 | Google うるう秒スメアリング |
五、権威ある参考資料
六、まとめ
- Unix タイムスタンプはクロスタイムゾーンプログラミングの基礎であり、2038年のオーバーフロー問題に注意が必要です。
- UTC は現代の国際標準時、GMT はタイムゾーン識別子(UTC+0)としてのみ使用。
- タイムゾーン変換は IANA データベースに依存し、うるう秒処理は IERS 公告を参照。
これらの概念を理解することで、金融取引やログ同期などの重要なシステムで時間ロジックを正確に制御できます。