Epoch / Unixタイムスタンプフォーマットガイド
Unixエポックタイムスタンプについて:1970年1月1日からの秒数とミリ秒数。変換方法、Y2K38問題、プログラミング言語での使用法を解説。
Standards
詳細な説明
Unixエポックタイムスタンプ
Unixタイムスタンプ(エポックタイムまたはPOSIXタイムとも呼ばれる)は、1970年1月1日00:00:00 UTC(Unixエポック)から経過した秒数として時点を表現します。
秒 vs ミリ秒
2つの一般的なバリアントがあります:
1772236800 # 秒(10桁)— 従来のUnix
1772236800000 # ミリ秒(13桁)— JavaScript、Java
時刻を表す大きな整数に遭遇した場合、桁数で精度がわかります:
- 10桁 — 秒(標準Unix)
- 13桁 — ミリ秒(JavaScript
Date.now()、JavaSystem.currentTimeMillis()) - 16桁 — マイクロ秒
- 19桁 — ナノ秒(Go
time.Now().UnixNano())
利点
- タイムゾーン中立 — タイムゾーンに関係なく絶対的な時刻を表現
- コンパクト — 単一の整数はフォーマット文字列より小さい
- ソート・比較可能 — 単純な数値比較
- 言語非依存 — すべての言語で整数を扱える
Y2K38問題
32ビット符号付き整数として格納されたタイムスタンプは2038年1月19日03:14:07 UTCにオーバーフローします。これはUnixシステムにとってのY2Kに相当します。現代のシステムは64ビット整数を使用しており、約2920億年はオーバーフローしません。
各言語での変換
| 言語 | タイムスタンプへ | タイムスタンプから |
|---|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
new Date(ts * 1000) |
| Python | int(time.time()) |
datetime.fromtimestamp(ts) |
| Java | Instant.now().getEpochSecond() |
Instant.ofEpochSecond(ts) |
| PHP | time() |
date('Y-m-d', $ts) |
| Go | time.Now().Unix() |
time.Unix(ts, 0) |
| Ruby | Time.now.to_i |
Time.at(ts) |
| C# | DateTimeOffset.UtcNow.ToUnixTimeSeconds() |
DateTimeOffset.FromUnixTimeSeconds(ts) |
ユースケース
Unixタイムスタンプはデータベース(PostgreSQL、MySQL)、メッセージキュー(Kafkaオフセット)、JWTトークンの有効期限クレーム(exp、iat、nbf)、APIレート制限、キャッシュ有効期限ヘッダー、ログ集約システムの標準的な時刻表現です。