Skip to content

タイムスタンプ変換

Unix タイムスタンプと読みやすい日付を即座に相互変換 — さらに Windows FILETIME.NET TicksLDAP/ADChrome WebKitExcel OADate にも対応。任意の値を貼り付ければ形式を自動検出し、ワンクリックでコピーできます。

変換

現在の Unix タイムスタンプ
0
ミリ秒0

タイムスタンプ → 日付

日付 → タイムスタンプ

Unix タイムスタンプとは?

Unix タイムスタンプUnix エポック時間POSIX 時間とも呼ばれる)は、1970-01-01 00:00:00 UTC(Unix エポック)からの経過秒数です。プログラミングで時点を表す最も一般的な方法です。

例えば、17000000002023 年 11 月 14 日 22:13:20 UTC に対応します。

Unix タイムスタンプの特徴:

  • タイムゾーン非依存 — 常に UTC 基準
  • 連続的 — ほとんどの実装ではうるう秒を含まない
  • コンパクト — 単一の整数で完全な日付を表現

秒とミリ秒

Unix タイムスタンプには 2 つの一般的な精度があります:

ミリ秒
17000000001700000000000
精度1 秒1 ミリ秒
使用例Unix/Linux API、ほとんどのデータベースJavaScript(Date.now())、Java、ログシステム
桁数約 10 桁約 13 桁

見分け方: 数値が 13 桁以上ならミリ秒です。この変換ツールは精度を自動判定するので、数値を貼り付けるだけです。

一般的なユースケース

  • ログのデバッグ — サーバーログのタイムスタンプを読みやすい時刻に変換してイベントを追跡
  • API 統合 — 多くの REST API が日付フィールドに Unix タイムスタンプを使用
  • データベースクエリ — エポック値を使用して時間範囲でレコードを検索
  • スケジューリング — タイムスタンプ演算で遅延を計算したり将来のイベントをスケジュール
  • UUID v7 — UUID v7 の最初の 48 ビットにミリ秒 Unix タイムスタンプが埋め込まれています。デコードして UUID の作成日時を確認
  • Active Directory 管理lastLogonpwdLastSetaccountExpires などの LDAP タイムスタンプを読みやすい日付に変換してユーザー監査
  • Excel / Office 自動化 — スプレッドシートや DateTime.FromOADate との相互運用時に OADate シリアル値をデコード
  • Chrome フォレンジック — デバッグやデジタルフォレンジックのため HistoryCookies の SQLite WebKit タイムスタンプを読み取る

Windows FILETIME とは?

Windows FILETIME1601-01-01 00:00:00 UTC からの 100 ナノ秒間隔を数える 64 ビット値です。Win32 API、NTFS ファイルシステム、COM/OLE のネイティブな時刻形式です。

FILETIME 構造体は値を 2 つの 32 ビット DWORD(dwLowDateTimedwHighDateTime)として格納します。GetFileTime()CoFileTimeNow()、NTFS マスターファイルテーブル(MFT)レコードで遭遇します。

変換公式:

unix_seconds = (filetime / 10000000) - 11644473600

例えば、1335927553562300002024-05-04 04:32:15 UTC です。この変換ツールは ~3 × 10¹⁷ 未満の 18 桁の値を FILETIME として自動検出します。

.NET DateTime Ticks とは?

.NET Ticks0001-01-01 00:00:00 UTC(西暦 1 年)からの 100 ナノ秒間隔を数える 64 ビット符号付き整数です。C#/.NET で DateTime のバッキングストアであり、DateTime.Now.Ticks でアクセスできます。

範囲は 0001-01-01 から 9999-12-31 までをカバーし、単一の long 値は最大約 3.16 × 10¹⁸ です。FILETIME(1601 基準)とは異なり、.NET ticks は負の値を避けカレンダー演算を簡素化するため西暦 1 年から始まります。

例えば、638514336000000000 ticks → 2024-05-16 00:00:00 UTC です。~3 × 10¹⁷ 以上の値は .NET ticks として検出され、それ未満では FILETIME の可能性が高くなります。

LDAP / Active Directory タイムスタンプとは?

LDAP タイムスタンプ(Microsoft Active Directory で使用)は 数値的に FILETIME と完全に同じです — 1601-01-01 UTC からの 100 ナノ秒間隔です。違いはコンテキストのみで、lastLogonlastLogonTimestamppwdLastSetaccountExpires などの AD 属性が LDAP スキーマの下で FILETIME 値を格納します。

AD 管理者はユーザーアクティビティとパスワード期限を監査するため、これらの値を定期的に変換します。PowerShell では:

powershell
[DateTime]::FromFileTime($value).ToString('yyyy-MM-dd HH:mm:ss')

例えば、1325145600000000002020-12-03 00:00:00 UTC です。accountExpires9223372036854775807Int64.MaxValue)なら「期限なし」を意味します。

Chrome / WebKit タイムスタンプとは?

Chrome と WebKit のタイムスタンプは **1601-01-01 UTC からのマイクロ秒(100 ナノ秒ではない)**を数えます。Chrome の HistoryCookiesLogin Data SQLite データベースに現れ、デバッグ、フォレンジック、データ復旧に役立ちます。

単位が μs(100ns ではない)であるため、同じ瞬間でも FILETIME より 10 倍小さい値になります。現在の時代の値は 17 桁(~1.3 × 10¹⁶)です。

Chrome 履歴を SQL で照会するには:

sql
SELECT datetime(time / 1000000 - 11644473600, 'unixepoch') AS visit_time
FROM urls ORDER BY visit_time DESC LIMIT 10;

例えば、133176960000000002023-01-09 00:00:00 UTC です。

Microsoft OADate / Excel シリアル値とは?

OADate(OLE Automation Date)は 1899-12-30 からの日数を数える double です。小数部分は一日のうちの時刻を表します(0.5 = 正午)。Excel、Google Sheets、Office 自動化はすべて内部的にこのシリアル形式を使用します。

なぜ 1900-01-01 ではなく 1899-12-30 なのでしょうか?Excel は意図的に 1900 年のうるう年バグ(1900 年はうるう年ではなかったが、Lotus 1-2-3 はうるう年として扱った)を再現しています。エポックを 2 日前にずらすことで、レガシーバグとの互換性を保ちます。

例えば、45678.52025-01-21 12:00:00 です。C# では DateTime.FromOADate(45678.5)。Excel では =DATE(2025,1,21)45678 を返します。

よくある質問

2038 年問題とは何ですか? 32 ビット符号付き整数の Unix タイムスタンプは 2147483647(2038 年 1 月 19 日 03:14:07 UTC)が最大値です。まだ 32 ビット time_t を使用しているシステムはオーバーフローします。ほとんどの近代的なシステムは既に 64 ビットタイムスタンプに移行しており、2920 億年間はオーバーフローしません。

このツールはタイムゾーンをどのように処理しますか? Unix タイムスタンプは本質的に UTC です。この変換ツールは UTC 表現とブラウザのローカルタイムゾーンの両方を表示します。

負のタイムスタンプは使えますか? はい。負の Unix タイムスタンプはエポック(1970-01-01 00:00:00 UTC)より前の日付を表します。例えば、-86400 は 1969 年 12 月 31 日 00:00:00 UTC — エポックのちょうど 1 日前です。

FILETIME と LDAP タイムスタンプの違いは何ですか? 数値的には同じです — どちらも 1601-01-01 UTC からの 100 ナノ秒間隔です。「FILETIME」は Win32/COM の名前で、「LDAP タイムスタンプ」は lastLogon のような Active Directory 属性に格納される同じ値を指します。どちらにも同じ変換公式を使います。

.NET DateTime Ticks はなぜ西暦 1 年から始まるのですか? .NET のカレンダーは 0001-01-01(グレゴリオ暦の慣例的な開始)から始まるため、すべての有効な日付が正の tick 値を生成します。これにより FILETIME の 1601 エポックでの符号処理の複雑さを避け、0001–9999 の全範囲で日付演算を簡素化します。

OADate のエポックが 1899 年 12 月 30 日なのはなぜですか? Excel は Lotus 1-2-3 から引き継いだバグで、1900 年をうるう年として扱っていました(実際は違います)。1900 年 3 月 1 日のような日付が Excel と現実で一致するよう、OLE Automation エポックは 1899-12-30 に設定されました — 名目上の「1900 年 1 月 1 日」の 2 日前であり、架空の 1900 年 2 月 29 日を補正しています。