UNIXタイムとタイムゾーンのイメージ

「このログ、結局いつのこと?」

システム開発中、コンソールに吐き出された 1736823600 という数字。
「ああ、これは UNIX タイムだね」と理解はしても、具体的にそれが何月何日の何時なのか、パッと答えられる人はまずいません。

ログ調査やデータベースの確認、API のデバッグ……。エンジニアの日常は、この「人間には読みづらいけれど、コンピューターには都合がいい数字」との戦いでもあります。

UNIX タイム:世界を繋ぐ「秒数」

UNIX タイム(エポック秒)は、1970年1月1日 00:00:00 UTC からの積み重ねです。

そもそも、なぜこんな読みづらいものを使うのでしょうか?
それは、世界中に散らばるコンピューターたちが、「今、この瞬間」を正しく共有するためです。
「日本の 9 時」は「イギリスの 0 時」ですが、UNIX タイムなら世界中どこでも同じ一つの数値。このシンプルさがあるからこそ、私たちは地球の裏側のサーバーとも同期してデータをやり取りできるのです。

開発現場でよくある「3つの罠」

仕組みを知っていても、私たちはつい「うっかり」ミスをしてしまいます。

1. 「秒」と「ミリ秒」の混同

JavaScript の Date.now() は 13 桁(ミリ秒)、PHP や Python の標準は 10 桁(秒)。
「API を叩いたら、1970 年の日付になっちゃった!」というのは、多くの場合この桁数の違いに気づいていないことが原因です。

2. タイムゾーンの壁

UNIX タイムは常に UTC(協定世界時)ですが、私たちの生活は JST(日本標準時)です。
「9 時間のズレ」を考慮し忘れて、深夜に動くはずのバッチ処理がお昼に暴走してしまった……なんて失敗、ありませんか?

3. 「2038 年」という期限

遠い未来の話と思っていましたが、少しずつ近づいています。古いシステムを触る機会があれば、「この変数、2038 年で溢れないかな?」という視点を持つことが、未来のあなた(あるいは後任者)を救うかもしれません。

UNIX時間を日時に変換する手順

ログやAPIレスポンスにあるUNIX時間を読むときは、まず桁数を確認します。
10桁なら秒、13桁ならミリ秒であることが多いです。

  1. 変換したい数値をコピーする。
  2. UNIXタイム変換ツール に貼り付ける。
  3. 秒かミリ秒かを確認する。
  4. UTCとJSTの日時を見比べる。
  5. ログ、DB、APIのタイムゾーン仕様と一致しているか確認する。

たとえば 1736823600 は10桁なので、秒のUNIXタイムとして扱います。
一方で 1736823600000 は13桁なので、JavaScriptなどでよく使われるミリ秒のタイムスタンプです。
この違いを間違えると、まったく別の日時として表示されます。

秒とミリ秒の見分け方

開発中に出てくるタイムスタンプは、言語やAPIによって単位が違います。
よくある目安は次の通りです。

種類桁数の目安よく出る場所
10桁UNIX系コマンド、PHP、Pythonの一部API
ミリ秒13桁JavaScriptの Date.now()、フロントエンドのログ
ISO 8601文字列REST API、JSONログ、DBの日時カラム

桁数だけで完全に判断できるわけではありませんが、最初の切り分けとしてはかなり有効です。
不安な場合は、変換結果が現在時刻や期待する期間に近いかを確認してください。

障害調査での使い方

UNIX時間の変換は、障害調査でもよく使います。
たとえば「ユーザーがエラーを見た時刻」と「サーバーログの時刻」がずれているときは、次の順番で確認すると原因を絞りやすくなります。

  • フロントエンドの時刻がミリ秒か秒か
  • サーバーログがUTCかJSTか
  • DBに保存されている日時のタイムゾーン
  • バッチやCronの実行タイムゾーン
  • 監視ツールの表示タイムゾーン

同じ出来事を見ているはずなのに時刻が合わない場合、単位とタイムゾーンのどちらかがずれていることが多いです。

迷ったときの「翻訳機」を、手元に

複雑な計算や変換は、無理に頭でやろうとせず、道具に任せてしまいましょう。

当サイトの UNIXタイム変換ツール は、数値を貼り付けるだけで、それが「秒」なのか「ミリ秒」なのかを自動で判別し、UTC とローカル時刻の両方に一瞬で翻訳します。

API 仕様の確認や、障害調査の真っ只中。
慌ただしい時間にこそ、このツールをあなたの「時間を読み解くレンズ」として活用してください。

よくある質問

UNIX時間はUTCですか?

はい。UNIX時間はUTCを基準にした経過秒数です。
JSTで表示するときは、表示側でUTCから日本時間へ変換します。

JavaScriptのタイムスタンプは秒ですか?

Date.now() はミリ秒です。
一般的なUNIX時間の秒として扱いたい場合は、Math.floor(Date.now() / 1000) のように1000で割ります。

1970年の日付になってしまうのはなぜですか?

秒とミリ秒の単位を間違えている可能性があります。
13桁のミリ秒を秒として扱ったり、10桁の秒をミリ秒として扱ったりすると、期待と大きく違う日時になります。

まとめ

UNIX タイムは、見慣れると愛着の湧く、実はとても公平で合理的な仕組みです。
数字の向こう側にある「時間」を自在に操れるようになれば、エンジニアとしての視界はもっと広く、クリアになります。さあ、時間を味方につけて、もっと楽しい開発を!