Unix タイムスタンプ変換
Unixタイムスタンプと人間が読める日付を相互変換。秒とミリ秒の精度に対応。
使い方
- Unixタイムスタンプを入力して人間が読める日付に変換します
- または日時を選択してUnixタイムスタンプに変換します
- 秒とミリ秒の形式を切り替えます
よくある質問
-
Unixタイムスタンプとは何ですか?
Unixタイムスタンプは、Unixエポックとも呼ばれる1970年1月1日(UTC)からの経過秒数です。プログラミングやデータベースで広く使用されています。
-
秒とミリ秒のタイムスタンプの違いは何ですか?
秒のUnixタイムスタンプは10桁(例:1700000000)、ミリ秒のタイムスタンプは13桁(例:1700000000000)です。JavaScriptはミリ秒を使用し、ほとんどのUnixシステムは秒を使用します。
-
Y2K38問題とは何ですか?
32ビットシステムはタイムスタンプを符号付き32ビット整数として格納しており、2038年1月19日にオーバーフローします。現代の64ビットシステムにはこの制限はありません。
-
このツールはタイムゾーンを考慮していますか?
ツールはUTCとローカルタイムゾーンの両方で時刻を表示し、簡単に比較できます。
Unixタイムスタンプとは何か
Unixタイムスタンプ(エポックタイムとも呼ばれる)は、1970年1月1日00:00:00 UTC(Unixエポック)からの経過秒数を整数で表したものです。この基準日時は「エポック」と呼ばれ、Unix系OSの標準時刻表現として1970年代から使われています。
なぜ1970年1月1日なのかという理由は明確ではありませんが、Unix OSが開発された時期に近い、切りのよい日付として選ばれたと言われています。
タイムゾーンに依存しない絶対時刻
Unixタイムスタンプの最大の利点は、タイムゾーンに依存しないことです。「2024年1月1日12:00:00」という表現はタイムゾーンによって意味が変わりますが、Unixタイムスタンプ1704067200は世界中のどこで使っても同じ瞬間を指します。
このため、データベースへの時刻保存、APIでの時刻受け渡し、ログのタイムスタンプなど、システム間でのデータ交換に広く使われています。
秒とミリ秒の違い
開発現場でよく混乱するのが、秒単位とミリ秒単位のタイムスタンプの違いです。
| 種別 | 桁数 | 例 | 主な用途 |
|---|---|---|---|
| 秒 | 10桁 | 1704067200 |
Unix/Linux、データベース |
| ミリ秒 | 13桁 | 1704067200000 |
JavaScript、Java |
JavaScriptのDate.now()はミリ秒を返し、new Date(timestamp)もミリ秒を期待します。一方、PythonのDatetimeモジュールやデータベースのタイムスタンプ型は秒を基準とすることが多いです。
系をまたいでデータを処理する際は、桁数を確認してから変換するようにしましょう。
2038年問題(Y2K38)
多くの方が聞いたことのある「2038年問題」とは、32ビット符号付き整数でUnixタイムスタンプを格納しているシステムで起きる問題です。
32ビット符号付き整数の最大値は2,147,483,647であり、これは2038年1月19日03:14:07 UTCに相当します。この時刻を過ぎると、整数がオーバーフローして負の値になり、システムが誤動作する恐れがあります。
現代の64ビットシステムではこの問題は起きませんが、組み込みシステムや古いデータベース、レガシーシステムではまだ対応が必要な課題として残っています。64ビットタイムスタンプなら、約2920億年先まで表現できます。
開発でのベストプラクティス
- データベースには常にUTCで保存し、表示時にローカルタイムゾーンに変換する
- タイムスタンプの単位を明示するか、変数名に
_secや_msのサフィックスをつける - ログには高精度タイムスタンプ(ミリ秒以下)を使い、分散システムでのイベント順序を把握できるようにする
- 32ビット整数の使用を避け、新しいシステムでは64ビット整数でタイムスタンプを扱う