メインコンテンツへスキップ

← ブログ一覧へ

Unix タイムスタンプ完全ガイド(秒・ミリ秒・タイムゾーン)

ログ・データベース・API を扱ったことがあれば、1700000000 のような数値が日付を表しているのを見たはずです。それが Unix タイムスタンプで、これを理解すると時刻関連のバグを丸ごと一つ減らせます。全体像を押さえましょう。

Unix タイムスタンプとは?

Unix タイムスタンプは、Unix エポック(1970 年 1 月 1 日 00:00:00 UTC)からの経過秒数です。UTC の固定点から数えるため、タイムゾーンに関係なく地球上のどこでも同じ意味を持つ単一の絶対値になります。

まさにこの性質ゆえにシステムは好んで使います。異なる国の 2 台のサーバーが、タイムゾーン計算なしで直接タイムスタンプを比較できるのです。

秒 vs ミリ秒

これが混乱の第一原因です。プラットフォームごとに単位が異なります:

  • — 10 桁の数値、例 1700000000。Unix ツール、データベース、多くの API で一般的。
  • ミリ秒 — 13 桁の数値、例 1700000000000。JavaScript の Date.now() はこれを返します。

覚え方:10 桁は秒、13 桁はミリ秒。変換した日付が 1970 年付近になったら、秒のところにミリ秒を(あるいはその逆を)渡した可能性が高いです。当サイトのタイムスタンプ変換ツールは桁数から単位を自動判定するので、迷う必要はありません。

タイムゾーンと UTC

タイムスタンプ自体にはタイムゾーンがありません——絶対的な瞬間です。タイムゾーンは表示するときにだけ意味を持ちます。同じタイムスタンプ 1700000000 は:

  • UTC では 2023-11-14 22:13:20
  • UTC+9(東京)では 2023-11-15 07:13:20

どちらも同じ瞬間を、異なるタイムゾーンで示したものです。デバッグ時は表示中の時刻がどのタイムゾーンかを必ず確認しましょう。当ツールはミスを防ぐためローカル時刻と UTC を並べて表示します。

コードでの変換

たいていの言語で変換は簡単です:

// JavaScript(ミリ秒)
const now = Date.now();               // 1700000000000
const date = new Date(1700000000000); // Date オブジェクト
const seconds = Math.floor(Date.now() / 1000);
# Python(秒)
import time
now = int(time.time())                # 1700000000
from datetime import datetime, timezone
dt = datetime.fromtimestamp(1700000000, tz=timezone.utc)

JavaScript がミリ秒で動くのに対し、Python の time.time() は秒を返す点に注目してください——これも単位を混同しないための理由です。

2038 年問題(簡単に)

タイムスタンプを符号付き 32 ビット整数で保存するシステムは、2038 年 1 月 19 日にオーバーフローします。現代のシステムは 64 ビット整数を使い、上限を数千億年先まで押し出すため、今日ではほとんど問題になりません——ただ、なぜ 64 ビット時刻があるのかは知っておく価値があります。

クイック変換

タイムスタンプを今すぐ確認したいですか?無料の Unix タイムスタンプ変換ツールに貼り付ければ、ローカルと UTC の日付を即表示し、日付からタイムスタンプへの逆変換や、現在のタイムスタンプのコピーができます。ブラウザで動作し、通信は不要です。