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()、Java System.currentTimeMillis()
  • 16桁 — マイクロ秒
  • 19桁 — ナノ秒(Go time.Now().UnixNano()

利点

  1. タイムゾーン中立 — タイムゾーンに関係なく絶対的な時刻を表現
  2. コンパクト — 単一の整数はフォーマット文字列より小さい
  3. ソート・比較可能 — 単純な数値比較
  4. 言語非依存 — すべての言語で整数を扱える

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レート制限、キャッシュ有効期限ヘッダー、ログ集約システムの標準的な時刻表現です。

試してみる — Date Format Reference & Tester

フルツールを開く