UNIXタイムスタンプ変換
1700000000のような数値を貼り付ければ、それが表す日時がわかります。日時を選べば、その数値が得られます。秒、ミリ秒、マイクロ秒、ナノ秒のどれかを指定する必要はありません。数値の大きさでわかります。
現在のUnix時間(秒)
入力するとすぐに結果が表示されます。変換はすべてブラウザで行うため、入力した値が当方に送信されることはありません。
数値から日付へ
日付から数値へ
日付と時刻の欄は、上で選んだタイムゾーンで読み取ります。Zや+02:00のようなオフセットで終わるテキストは、それ自身のタイムゾーンを使います。
1つの数値が、どこでも同じ瞬間を表す
ビデオ会議で3人に今何時かと聞くと、9時、15時、23時という答えが返ってくるかもしれません。全員正しいのですが、出来事を順に並べたり、セッションを期限切れにしたり、文書に署名したりしなければならないコンピューターにとっては、何の助けにもなりません。
UNIX時間は、1970年1月1日午前0時(UTC)からの秒数を数えることでこれを回避します。この起点はエポックと呼ばれます。カウントは2023年11月14日22:13:20(UTC)に1,700,000,000に達しました。ニューヨークでは午後5時13分、東京ではすでに翌朝でしたが、地球上のすべての機械が同じ数値を示していました。
タイムスタンプにはタイムゾーンもサマータイムもありません。タイムゾーンが関わるのは、数値を人が読める形に変えるときだけです。だからこのページでは、どのタイムゾーンで表示するかを尋ね、その横にUTCも表示します。
秒、ミリ秒、さらにその先
元のカウントは秒単位です。もっと細かい刻みが必要なシステムは多く、同じエポックからより小さな単位で数えますが、数値そのものには単位が書かれていません。桁数で判断するしかありません。
| 単位 | 現在の桁数 | よくある出どころ |
|---|---|---|
| 秒 | 10 | Unixのツール、PHPのtime()、JWTの日時、ほとんどのAPI |
| ミリ秒 | 13 | JavaScriptのDate.now()、Java、Kafka |
| マイクロ秒 | 16 | PostgreSQL、Pythonのtime.time_ns() // 1000、トレースログ |
| ナノ秒 | 19 | GoのUnixNano()、InfluxDB、OpenTelemetry |
変換ツールも同じ方法を使います。1,000億未満なら秒、100兆未満ならミリ秒、その次はマイクロ秒、さらにナノ秒と読みます。どれとみなしたかは表示します。推測が外れるのは、1970年に近い日時を細かい単位で書いた場合だけで、「単位」のリストで上書きできます。
単位の取り違えは、タイムスタンプの典型的なバグです。秒をミリ秒として読むと1970年1月に、ミリ秒を秒として読むと何万年も先の未来に着地します。
見直す価値のある値
- 0、またはとても小さな数値
- 0はエポックそのものです。空の日付フィールドに入っている値で、UTCより西のタイムゾーンでは1969年12月31日と表示されます。エポックから1か月以内の値にも印を付けます。たいていは期間を表す値か、誰も入力しなかったフィールドだからです。
- 負の数
- 有効な値で、過去に向かって数えます。-86400は1969年12月31日です。古いソフトウェアには保存できないものもあります。
- 2,147,483,648以上
- 符号付き32ビット整数は2,147,483,647で止まります。これは2038年1月19日03:14:07(UTC)です。その1秒後、そうしたカウンターは1901年12月に巻き戻ります。今も32ビットで時刻を保持しているシステムは、それまでに64ビットへ移行する必要があります。
- -1
- 関数が日時の読み取りに失敗したときによく返す値です。
日時から数値に戻す
逆方向の変換には、もう1つ情報が必要です。その日時がどのタイムゾーンで書かれたかです。「2025年3月9日14:30」は、シカゴとベルリンでは6時間離れた別の瞬間です。日付と時刻の欄は、選んだタイムゾーンで読みます。2025-03-09T14:30:00-05:00のような文字列や、Zで終わる文字列は自分のオフセットを持っているので、書かれたとおりに読みます。
サマータイムは2つの奇妙なケースを生みます。ツールはどちらも報告します。
- 存在しない時刻。時計が02:00から03:00に飛ぶ日には、02:30がありません。変換ツールは多くのソフトウェアと同じく、読み取りを飛んだ先へずらし、そのことを表示します。
- 2回存在する時刻。時計が02:00から01:00に戻るとき、01:30は1時間の間隔で2回やってきます。変換ツールは1回目を返し、2回目も合わせて示します。
UNIX時間はうるう秒を無視します。1日は常にちょうど86,400秒と数えます。計算は単純なままですが、タイムスタンプは経過秒数の正確なカウントではありません。1972年以来、27秒ずれています。
タイムゾーンのルールは、ブラウザーに組み込まれたタイムゾーンデータベースから取得します。過去の日時には現在知られているルールが反映され、将来の日時については国がルールを変える可能性があります。
よくある質問
UNIXタイムスタンプとは何ですか?
1970年1月1日00:00:00(UTC)からの秒数で、うるう秒は数えません。どのタイムゾーンにも依存しない1つの整数で1つの瞬間を表すので、保存、比較、引き算が簡単です。
タイムスタンプが秒かミリ秒か、どうすればわかりますか?
桁数を数えます。現在の日時なら、秒は10桁、ミリ秒は13桁です。マイクロ秒は16桁、ナノ秒は19桁です。日時が1970年や遠い未来の年になったら、単位の読み方が間違っています。
日付が1970年1月1日と表示されるのはなぜですか?
保存されている値が0か、それに近い値です。フィールドが一度も入力されなかったか、変換に失敗して0が返されたか、秒の値がミリ秒として読まれたかのどれかです。UTCより西では、同じ瞬間が1969年12月31日と表示されます。
2038年問題とは何ですか?
UNIX時間を符号付き32ビット整数で保持するソフトウェアは、2,147,483,647まで数えられます。これは2038年1月19日03:14:07(UTC)です。次の1秒でオーバーフローし、1901年12月の日時として読まれます。解決策は時刻を64ビットで保存することです。
UNIXタイムスタンプにタイムゾーンはありますか?
いいえ。UTCで定義された瞬間からの秒数なので、同じ数値がどこでも正しい値です。タイムゾーンが適用されるのは、数値をカレンダーの日付と時刻として表示するときだけです。
コードで現在のUNIX時間を取得するには?
シェルではdate +%s。JavaScriptではMath.floor(Date.now() / 1000)。Pythonではint(time.time())。PHPではtime()。SQLでは、MySQLならUNIX_TIMESTAMP()、PostgreSQLならEXTRACT(EPOCH FROM now())です。