Unix タイムスタンプの形式を解説
すべての Unix タイムスタンプ形式の完全リファレンス — 秒・ミリ秒・マイクロ秒・ISO 8601・RFC 2822 — に加え、各言語とデータベースがどの形式を使うかを示す例付き。
秒単位の Unix 時間 — 普遍的な形式
最も一般的な形式:1970 年 1 月 1 日 00:00:00 UTC からの整数秒を数える 32 ビットまたは 64 ビットの整数。現在は約 17 億の 10 桁の数値です。
- 例:1700000000 = 2023-11-15 06:13:20 UTC
- 使用例:Python time.time()、PHP time()、Go time.Now().Unix()、Ruby Time.now.to_i、C time(NULL)
- 保存形式:32 ビット int(レガシー、最大 2038 年)、64 ビット int(現代、数十億年安全)
- データベース:MySQL UNIX_TIMESTAMP()、PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT
ミリ秒単位の Unix 時間 — JavaScript の形式
Unix エポックからのミリ秒:ミリ秒精度を持つ 13 桁の整数。JavaScript の Date オブジェクトが内部で使う形式です。
- 例:1700000000000 = 2023-11-15 06:13:20.000 UTC
- 使用例:JavaScript Date.now()、Java System.currentTimeMillis()、.NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- 秒に変換:Math.floor(ms / 1000)
- 秒から変換:seconds * 1000
ISO 8601 — 人間が読める標準
ISO 8601 は日付と時刻を文字列で表す国際標準です。Unix タイムスタンプと違い自己記述的で、形式の中に日時とタイムゾーンオフセットを含みます。
- 2023-11-15T06:13:20Z — UTC(末尾の Z は UTC を意味する)
- 2023-11-15T01:13:20-05:00 — 明示的な UTC オフセット付き(EST)
- 2023-11-15T06:13:20.000Z — ミリ秒付き
- JavaScript:date.toISOString() は常に末尾 Z 付きの UTC を返す
- Python:datetime.isoformat()、Go:time.Format(time.RFC3339)
RFC 2822 — メールと HTTP の日付形式
RFC 2822(HTTP では RFC 1123 とも呼ばれる)は、メールヘッダーや HTTP レスポンスで使う日付形式です。JavaScript の Date.toUTCString() はこの形式を返します。
- 例:Wed, 15 Nov 2023 06:13:20 GMT
- 使用箇所:HTTP レスポンスヘッダー(Last-Modified、Date、Expires)、メールヘッダー(Date:)
- JavaScript:date.toUTCString()
- 現代の API では少ないが、Web インフラでは今も広く見られる
タイムスタンプ形式の見分け方
未知のタイムスタンプ値を受け取ったら、次のルールで形式を判別します:
- 10 桁、1 で始まる → Unix 秒(例:1700000000)
- 13 桁、1 で始まる → Unix ミリ秒(例:1700000000000)
- 負の値 → 1970 年より前の Unix 秒またはミリ秒
- T または Z を含む → ISO 8601(例:2023-11-15T06:13:20Z)
- カンマや曜日名を含む → RFC 2822(例:Wed, 15 Nov 2023 ...)
- 16 桁 → マイクロ秒(秒にするには 1,000,000 で割る)
- 19 桁 → ナノ秒(秒にするには 1,000,000,000 で割る)
マイクロ秒とナノ秒
一部の高精度システムはミリ秒より小さい単位を使います。アプリケーションコードでは稀ですが、低レベルのシステム、データベース内部、可観測性ツールに現れます。
- マイクロ秒(µs):16 桁の整数 — Rust SystemTime as_micros()、PostgreSQL clock_gettime()
- ナノ秒(ns):19 桁の整数 — Go time.Now().UnixNano()、Rust SystemTime as_nanos()
- PostgreSQL EXTRACT(EPOCH) は小数部にマイクロ秒を持つ浮動小数点数を返す
- ナノ秒を秒に変換:1,000,000,000(1e9)で割る
Unix タイムスタンプ形式 FAQ
- Unix タイムスタンプは何桁ですか?
- 現代の Unix タイムスタンプは秒で 10 桁(約 17 億)、ミリ秒で 13 桁です。マイクロ秒は 16 桁、ナノ秒は 19 桁です。
- Unix 時間と ISO 8601 の違いは?
- Unix 時間は 1970 年 UTC からの秒またはミリ秒の単一の数値で、タイムゾーンを持ちません。ISO 8601 は 2023-11-15T06:13:20Z のような自己記述的な文字列で、日付・時刻・オフセットを含みます。
- 秒かミリ秒かを見分けるには?
- 桁数を数えます:10 桁は秒、13 桁はミリ秒です。値が 1970 年付近や遠い未来の日付になる場合、単位を読み違えています。