UUIDはタイムスタンプをどのように格納するか?

いくつかのUUIDバージョンは、タイムスタンプを構造内に直接埋め込んでいます。RFC 4122で導入されたUUID v1は、1582年10月15日からの100ナノ秒間隔を表す60ビットのグレゴリオ暦タイムスタンプをエンコードします。UUID v6は同じタイムスタンプフィールドを並べ替えてソート性を向上させており、RFC 9562で定義されたUUID v7は48ビットのUnixエポックタイムスタンプをミリ秒単位で格納します。これらの埋め込みタイムスタンプにより、UUIDが生成された正確な瞬間を復元することが可能になります。これはデバッグ、監査、フォレンジック分析に役立ちます。

すべてのUUIDが時刻情報を持つわけではありません。バージョン3、4、5はランダムデータまたは名前空間ハッシュから生成されるため、復元可能なタイムスタンプは含まれていません。バージョン2(DCE Security)はタイムスタンプを含みますが、実際にはほとんど使用されません。

ツールの説明

このツールは、時刻ベースのUUIDに埋め込まれたタイムスタンプを抽出・デコードします。UUIDを貼り付けるだけで、エンコードされた日時をISO 8601、UTC、ローカル時刻、秒およびミリ秒単位のUnixタイムスタンプなど複数のフォーマットで即座に確認できます。ツールはUUIDのバージョンを自動検出し、適切なデコードアルゴリズムを適用します。

使用例

UUID v1の入力:

6ba7b810-9dad-11d1-80b4-00c04fd430c8 → 1998年4月7日

UUID v7の入力:

018f3e88-5c00-7b3a-8512-2d4a3f8e9c01 → 2024年5月3日

UUID v4の入力(タイムスタンプなし):

550e8400-e29b-41d4-a716-446655440000 → 「このUUIDバージョンにはタイムスタンプが含まれていません」

機能

  • UUID v1(グレゴリオ暦タイムスタンプ)、v6(グレゴリオ暦の並べ替え)、v7(Unixエポックミリ秒)をサポート
  • ISO 8601、UTC、ローカル時刻、Unixタイムスタンプ形式で結果を表示
  • UUIDのバージョンを自動検出し、適切なデコード方法を選択
  • 抽出を試みる前にUUIDフォーマットを検証
  • タイムスタンプを含まないUUIDバージョンに対して明確なメッセージを表示

仕組み

時刻ベースの各UUIDバージョンは、タイムスタンプを異なる方法で格納します:

  • UUID v1 は60ビットのグレゴリオ暦タイムスタンプを3つのフィールドに分割します:time_low(ビット0〜31)、time_mid(ビット32〜47)、time_hi(ビット48〜59)。タイムスタンプは1582年10月15日からの100ナノ秒間隔をカウントします。
  • UUID v6 はv1のタイムスタンプフィールドを並べ替え、最上位ビットを先頭に配置することで、同じグレゴリオ暦エポックを使用しながら、UUIDを作成時刻順に自然にソートできるようにします。
  • UUID v7 はよりシンプルなアプローチを採用しており、先頭48ビットにミリ秒単位の標準Unixタイムスタンプを格納することで、抽出が簡単になり、現代のシステムとの互換性も確保されています。

ユースケース

  • 分散システムのデバッグ — レコードやイベントに割り当てられたUUIDをデコードすることで、それが作成された正確な時刻を特定する
  • 監査とフォレンジック — 時刻ベースのUUIDを主キーとして使用するデータベースの作成タイムスタンプを検証する
  • 移行計画 — システム間の移行前に、UUIDのタイムスタンプを分析してデータの分布と経過時間を把握する