約3分で読めます
Unixタイムスタンプとは?日時との変換・秒とミリ秒・タイムゾーンの基礎
Unixタイムスタンプとは
Unixタイムスタンプ(エポック秒、Unix時間とも)は、1970年1月1日 00:00:00 UTC からの経過秒数で時刻を表す方式です。例えば 1700000000 は2023年11月14日あたりを指します。
人間にとっては読みにくい数値ですが、コンピュータにとっては「ただの整数」なので、時刻の保存・比較・差分計算がとても簡単になります。データベースやAPI、ログのタイムスタンプで広く使われています。
なぜ秒数で表すのか
- 比較が簡単 — 大小比較だけで前後関係が分かる(
a < bなら a の方が過去) - 計算が簡単 — 1時間後は
+3600、1日後は+86400を足すだけ - タイムゾーンに依存しない — 基準がUTCで固定されているため、世界中どこでも同じ値
日時との相互変換
タイムスタンプと人間が読める日時の変換は頻繁に発生します。
| 方向 | 例 |
|---|---|
| 日時 → タイムスタンプ | 2024-01-01 00:00:00 UTC → 1704067200 |
| タイムスタンプ → 日時 | 1704067200 → 2024-01-01 00:00:00 UTC |
主要言語での変換例です。
// JavaScript(ミリ秒に注意)
Date.now() // 現在のミリ秒タイムスタンプ
new Date(1704067200 * 1000) // 秒 → Dateオブジェクト
ログの数値を素早く読みたいときはタイムスタンプ変換ツールに貼り付けるのが手軽です。2つの日時の間隔を知りたいときは日数計算ツールも便利です。
秒とミリ秒に注意
最大の落とし穴が「秒」と「ミリ秒」の混在です。
- Unix標準は「秒」 —
1704067200(10桁) - JavaScriptは「ミリ秒」 —
1704067200000(13桁)
桁数で見分けられます。10桁なら秒、13桁ならミリ秒です。秒の値をミリ秒として扱うと「1970年」になり、逆だと「遠い未来」になります。変換時は × 1000 / ÷ 1000 を忘れないようにしましょう。
タイムゾーンの扱い
タイムスタンプ自体は常にUTC基準なのでタイムゾーンを持ちません。「表示するとき」だけローカルのタイムゾーン(日本ならUTC+9、JST)に変換します。保存はタイムスタンプ(UTC基準)で統一し、表示時に変換するのが定石です。
まとめ
- Unixタイムスタンプは1970/1/1 UTCからの経過秒数
- 比較・計算・タイムゾーン非依存で扱いやすい
- 10桁なら秒、13桁ならミリ秒。混同に注意
- 保存はUTC基準、表示時にローカルへ変換
- 変換はタイムスタンプ変換ツールが手軽