RunToolz iconRunToolz
Welcome to RunToolz!
タイムスタンププログラミングデータベース

Unixタイムスタンプって何?なぜ気にするべき?

データベース内のあの巨大な数字はランダムじゃありません。意味とその扱い方がこちら。

RunToolz Team2026年1月12日5 min read

APIレスポンスをデバッグしています。created_at という値が 1704067200 のフィールドがあります。何日ですか?

それはUnixタイムスタンプです。1970年1月1日からの秒数です。そして理解すると、どこにでも見かけます。

なぜ1970年?

Unixは1960年代後半に開発されていました。設計者は時間計算の開始点が必要でした。1970年1月1日は実用的に十分最近で、ほとんどのコンピューティング歴史をカバーするのに十分早かった。

その瞬間——1970年1月1日UTC午前0時——はUnixエポックと呼ばれます。

実際に試してみませんか?タイムスタンプを変換

なぜ日付じゃなく秒?

日付は複雑です。タイムゾーン、サマータイム、うるう年、月の長さの変動。「2024年3月15日午後3時EST」は多くのパースが必要。

タイムスタンプはただの数字。1710522000。保存しやすい、比較しやすい、数学しやすい。

どのイベントが最初に起きたか知りたい?2つの数字を比較。何かにかかった時間を知りたい?タイムスタンプを引く。24時間追加したい?86400を足す。

タイムゾーンの利点

賢い部分がこちら:タイムスタンプは常にUTC。

東京とニューヨークの誰かが両方とも同じ瞬間を記録すると、同じタイムスタンプを得ます。表示は異なるかもしれません——一方は午前9時を見、もう一方は午後7時を見る——でも基礎となる数字は同一。

これが分散システムを可能にします。データベース、API、ログファイル——サーバーがどこにあろうとすべて同じ基準点を使います。

ミリ秒 vs 秒

JavaScriptはエポックからのミリ秒を使います。ほとんどの他の言語は秒を使います。

1704067200(秒)= 2024年1月1日、00:00:00 UTC 1704067200000(ミリ秒)= 同じ瞬間

タイムスタンプがあまりに大きく見えるなら、おそらくミリ秒。1000で割りましょう。

タイムスタンプを素早く読む

暗算を調整するためのいくつかの基準点:

  • 1000000000(10億)= 2001年9月9日
  • 1600000000 = 2020年9月
  • 1700000000 = 2023年11月
  • 1800000000 = 2027年1月

現在のタイムスタンプは17億の範囲。17で始まるものを見たら、おそらく最近のタイムスタンプ。

よくある操作

現在のタイムスタンプ:

Math.floor(Date.now() / 1000)  // JavaScript
import time; int(time.time())  # Python

タイムスタンプを日付に:

new Date(1704067200 * 1000)  // JavaScriptはミリ秒が必要

日付をタイムスタンプに:

Math.floor(new Date('2024-01-01').getTime() / 1000)

2038年問題

Unixタイムスタンプは元々32ビット符号付き整数として保存されました。最大値は?2,147,483,647。

それは2038年1月19日、03:14:07 UTC。

その瞬間の後、32ビットシステムはオーバーフローします。タイムスタンプのY2K。

ほとんどの現代システムは今64ビット整数を使い、数十億年オーバーフローしません。でもレガシーシステムは存在します。古いコードを扱っているなら、チェックする価値があります。

タイムスタンプが変になる時

負のタイムスタンプ。 1970年より前の日付は負の数。-86400 は1969年12月31日。

うるう秒。 UTCは時々、地球の自転と同期を保つために秒を追加。ほとんどのシステムはこれを無視。時々カオスを引き起こします。

クロックドリフト。 サーバーの時計は不一致かもしれません。異なるマシンからの2つのタイムスタンプは、時計が同期していなければ直接比較できないかもしれません。


タイムスタンプは見始めるとどこにでもあります。APIレスポンス、データベースレコード、ログファイル、クッキー。理解すればデバッグが速くなり、時間関連コードが謎でなくなります。