Unixタイムスタンプを使いこなす — ログ解析・APIデバッグの実践ガイド
サーバーログに並ぶ「1751500800」のような10桁の数字、APIレスポンスの created_at フィールドに入った謎の整数——これらはUnixタイムスタンプ(epoch time)です。人間には読めない形式ですが、システム間で日時をやり取りするうえでは非常に扱いやすいため、ログ解析やAPI開発の現場で頻繁に登場します。この記事では、Unixタイムスタンプの基本と、実際に変換が必要になる場面での対処法をまとめました。
Unixタイムスタンプとは
Unixタイムスタンプは、協定世界時(UTC)1970年1月1日0時0分0秒を基準(epoch)として、そこから経過した秒数で日時を表す方式です。タイムゾーンの概念を持たず、世界中どこでも同じ1つの数値で同じ瞬間を指せるのが特徴です。
例えば 1751500800 は「2025-07-03T00:00:00Z」を表します。この基準日時からの経過秒数がそのまま値になるため、日付の大小比較や差分計算が単純な引き算だけで済むという利点があります。
注意点として、JavaScriptの Date.now() や多くのAPIが返す値は「ミリ秒単位」であるのに対し、Unixタイムスタンプの標準的な定義(POSIX time)は「秒単位」です。桁数を見れば区別できます。秒単位なら10桁(2026年時点)、ミリ秒単位なら13桁です。この違いを見落として1000倍・1000分の1を間違えるのは非常によくあるミスなので、変換前に必ず桁数を確認してください。
実際に必要になる場面
1. サーバーログの日時を読む
access.logやアプリケーションログでは、パフォーマンスや容量の都合でタイムスタンプが数値のまま記録されていることがあります。障害調査でログを追う際、まずこの数値を人間が読める日時に変換する必要があります。
2026-07-02 10:23:41 [INFO] request received at=1751451821
このような行を見たら、1751451821 が指す実際の日時をすぐに確認したくなるはずです。
2. APIレスポンスの created_at / updated_at を確認する
REST APIのレスポンスでは、日時フィールドがISO 8601形式の文字列ではなくUnixタイムスタンプの整数で返ってくることがあります。
{
"id": 42,
"created_at": 1751451821,
"updated_at": 1751500800
}
デバッグ中に「このレコードはいつ作られたのか」「更新から何秒経過しているのか」を素早く把握したい場面で、変換ツールが役立ちます。
3. JavaScriptでの日付処理
JavaScriptで日時を扱う場合、Date.now() はエポックからのミリ秒数を返します。Unixタイムスタンプ(秒)との相互変換は次のように行います。
// ミリ秒 → 秒(Unixタイムスタンプ)
const unixTime = Math.floor(Date.now() / 1000);
// 秒 → Dateオブジェクト
const date = new Date(unixTime * 1000);
// Dateオブジェクト → 秒
const backToUnix = Math.floor(date.getTime() / 1000);
getTime() もミリ秒を返す点は Date.now() と同じです。API側が秒単位を期待しているのにミリ秒のまま送ってしまうバグは実務でよく発生するため、変換の前後どちらが秒でどちらがミリ秒かを都度確認する習慣をつけると安全です。
4. 2038年問題
Unixタイムスタンプを符号付き32bit整数で保持しているシステムでは、2038年1月19日3時14分7秒(UTC)を超えると値がオーバーフローします。32bit整数で表現できる最大値は 2³¹−1 秒であり、次の1秒を加算しようとすると値が −2³¹ に反転し、1901年12月13日を指す扱いになってしまいます。
現在は多くのシステムが64bit整数に移行済みですが、古い組み込み機器やレガシーなデータベーススキーマでは32bit運用が残っている場合があります。長期間の日時計算を扱うシステムを設計・保守する際は、内部で使っている整数のビット幅を確認しておくと安心です。
コマンドラインでの変換
Linux/macOSの date コマンドでは、タイムスタンプから日時への変換と、その逆変換の両方が可能です。
# タイムスタンプ → 日時
date -d @1751451821
# 2026年 7月 2日 火曜日 10:23:41 UTC
# 日時 → タイムスタンプ
date -d "2026-07-02 10:23:41 UTC" +%s
# 1751451821
macOSのBSD系dateコマンドはオプション体系が異なり、-r フラグを使います。
date -r 1751451821
Pythonでは datetime モジュールの fromtimestamp() を使います。
from datetime import datetime, timezone
dt = datetime.fromtimestamp(1751451821, tz=timezone.utc)
print(dt) # 2026-07-02 10:23:41+00:00
tz引数を省略するとローカルタイムゾーンで解釈されるため、ログの調査など正確な時刻が必要な場面では timezone.utc を明示的に指定するのが安全です。
まとめ
Unixタイムスタンプは、ログ解析やAPIデバッグの現場で避けて通れない表記形式です。秒とミリ秒の桁数の違い、コマンドラインでの変換方法、2038年問題の存在を押さえておけば、数値を見た瞬間に「いつのことか」を素早く判断できるようになります。手元で素早く変換したいときは、下記のツールもあわせて使ってください。