Unixタイムスタンプを手軽に扱う
3人の開発者に今何時か尋ねると、座っている場所によって3つの異なる答えが返ってくるかもしれません。Unixタイムスタンプに尋ねると、地球上のすべての人に対してまったく同じ1つの数値が返ってきます。その単一の整数が、触れるほぼすべてのログファイル・データベース行・APIレスポンスの背後でエポック時刻が静かに支えている理由です。このページでは、その数値が何を意味するか、両方向への変換方法、そしてよくある落とし穴を解説します。

Unix時刻とは何か
Unixタイムスタンプは、1970年1月1日00:00:00 UTC以降に経過した秒数で、うるう秒は数えません。その瞬間がエポックと呼ばれ、初期のUnixエンジニアが単に便利な区切りの日付として選んだものです。エポック時点での値はちょうど0です。それ以降の毎秒1が加算されるため、数値は増え続けるだけです。1970年以前の日付も有効で、負の整数で表現されます。
この概念はPOSIX時刻または単にエポック時刻とも呼ばれます。ラベルが何であれ、仕組みは同じです:秒の増加し続けるカウンター1つ。整形された文字列ではなくプレーンな整数であるため、コンピューターは数バイトで保存でき、1回の引き算で2つを比較できます。
秒・ミリ秒・その仲間たち
古典的なUnix時刻は整数の秒を数え、今日見かけるおなじみの10桁の数値を生成します。しかし多くの環境ではより細かい解像度が必要です。例えばJavaScriptはミリ秒単位で動作し、13桁の値を生成し、さらにマイクロ秒やナノ秒に踏み込むシステムもあります。信頼できる経験則:10桁の数値は秒、13桁はミリ秒です。変換した日付が現在を期待しているのに1970年頃に表示される場合、ほぼ確実にミリ秒を秒のフィールドに入力したか、その逆をしています。このコンバーターは大きさを自動検出するため、推測する必要はほとんどありません。
開発者が頼る理由
最大のメリットはタイムスタンプがタイムゾーンに依存しないことです。整数1735689600は東京・ベルリン・サンパウロで同じ瞬間を指します。その数値をフォーマットされたローカル文字列の代わりに保存することで、値がどの時計に属していたかを心配する必要がなくなります。ソートも簡単です。時系列の順序はただの数値の順序なので、タイムスタンプ列上のデータベースインデックスはパースなしでイベントを正しく並べます。算術も同様にクリーンです:2つのイベントの差は1回の引き算で、1日の追加は86400を加えるだけです。これらの特性が、ログ・トークン・キャッシュ・メッセージキューすべてでエポック時刻が使われる理由です。
双方向の変換
タイムスタンプから人間が読める日付への変換は、秒のカウントをカレンダーに投影し、気にするタイムゾーンでフォーマットすることを意味します。逆方向では、年・月・日・時刻を取得し、どのタイムゾーンで表現されているかを決定し、エポックからの秒数に折りたたみます。このツールは両方向を即座に、ブラウザ内で完全に処理するため、貼り付けたものはマシンを離れません。数値を貼り付けてデコードするか、日付を選んでエンコードし、同時にUTCとローカル時刻の両方で結果を読み取ってください。

UTCとローカル時刻、定番の落とし穴
タイムスタンプ自体にはタイムゾーンがありません。常にUTCに固定されています。混乱が生じるのは表示するときだけです。1700000000を変換して夕方の時刻が表示され、別の国の同僚が午後の時刻を見ても、何も壊れていません——両者は異なるローカル時計でレンダリングされた同じ瞬間を見ています。バグはコードがローカルの日付をUTCであるかのように読んだり、オフセットを記録せずに壁時計の時刻をスタンプしたりするときに忍び込みます。安全な習慣は、UTCで保存と送信を行い、人に値を表示する最後の瞬間にのみローカルオフセットを適用することです。疑わしい場合は、ローカルの行ではなくコンバーターのUTCの行と比較してください。
2038年問題
多くの古いシステムはUnix時刻を符号付き32ビット整数に保存していました。そのフィールドは2038年1月19日03:14:07 UTC後の1秒で余裕がなくなり、カウンターがオーバーフローして負の数に折り返し、日付が1901年に戻る可能性があります。Y2Kと同じファミリーの問題です。良いニュースは、現代のオペレーティングシステムと言語が主に64ビットタイムスタンプに移行しており、これは約2920億年後までオーバーフローしないため、新しいコードにとっては主に知っておく価値のある歴史的な話題であり緊急事態ではありません。
その他のブラウザベースのヘルパーについてはデベロッパーツールをご覧ください。数値を直接扱う必要がある場合は、計算ツールもすぐ近くにあります。
よくある質問
Unixタイムスタンプとは何ですか?
1970年1月1日00:00:00 UTC以降に経過した秒数で、うるう秒は数えません。その開始の瞬間はエポックと呼ばれ、カウントは時間とともに増加するだけです。
なぜ数値が1970年頃の日付に変換されるのですか?
秒とミリ秒を混同している可能性があります。10桁の数値は秒で、13桁の数値はミリ秒です。ミリ秒を秒のフィールドに入力すると、見かけ上の時刻が約1000分の1になり、エポック付近に着地します。
Unixタイムスタンプにはタイムゾーンがありますか?
いいえ。値は常にUTCに固定されています。タイムゾーンは、タイムスタンプを人間が読める日付として表示するときにのみ登場します。だから同じ数値でも人によって異なる壁時計の時刻が表示されます。
日付をタイムスタンプに変換するにはどうすればよいですか?
年・月・日・時刻を入力し、その日付がどのタイムゾーンで表現されているかを決定すると、ツールがエポックからの秒数に折りたたみます。このページでブラウザ内即座に両方向を処理できます。
2038年問題とは何ですか?
Unixタイムスタンプを符号付き32ビット整数で保存するシステムが2038年1月19日03:14:07 UTC後の1秒でオーバーフローします。現代の64ビットタイムスタンプはこれを数十億年間回避するため、ほとんどの現在のソフトウェアは影響を受けません。
データはサーバーに送信されますか?
いいえ。変換はブラウザ内で完全に実行されるため、貼り付けたタイムスタンプや日付はご自身のデバイスに留まります。
