Unix タイムスタンプ変換

Unixタイムスタンプと人間が読める日付を相互変換。秒とミリ秒の精度に対応。

使い方

  1. Unixタイムスタンプを入力して人間が読める日付に変換します
  2. または日時を選択してUnixタイムスタンプに変換します
  3. 秒とミリ秒の形式を切り替えます

よくある質問

  • 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ビット整数でタイムスタンプを扱う