タイムスタンプを日付に変換
UNIXタイムスタンプを任意のタイムゾーンの読める日付に変換し、UTCとISO 8601の表記も並べて表示します。
1行に1つのタイムスタンプまたは日付を、最大500行まで入力できます。
このコードをDiscordのメッセージに貼り付けると、読む人それぞれのタイムゾーンと言語で表示されます。
このタイムスタンプを自分のコードで変換します。
UNIXタイムスタンプを読める日付に変換する
UNIXタイムスタンプは、1970年1月1日00:00:00 UTCからの経過秒数です。ログ、API、データベース、JWTのクレームがこの形で時刻を保存するのは、整数1つなら曖昧さがないからです。その値が指すのは「ある瞬間」であって、どこかの壁時計の読みではありません。代償として、人間が一目で読むことはできません。このページは、まさにその用途でタイムスタンプ変換ツールを開きます。数値を貼り付けて、日付を読むだけです。
結果は4つの形で同時に表示されます。1行目は上部で選択中のタイムゾーンでの瞬間、2行目は<abbr title="Coordinated Universal Time">UTC、3行目は多くのAPIが求めるISO 8601形式、4行目は現在からの隔たりを平易な言葉で示したものです。計算はすべてブラウザー内で行われ、数値がページの外に出ることはありません。
秒とミリ秒、そして桁数という見分け方
同じ瞬間でも単位によって桁数が変わり、単位を読み違えると日付は何十年もずれます。この変換ツールは桁数から推測し、何を前提にしたかを表示します。データが変わり種のときは単位メニューでその推測を上書きできます。
| 単位 | 同じ瞬間の表記 | 桁数 | 主な出どころ |
|---|---|---|---|
| 秒 | 1735689600 | 10 | UNIX系ツール、PHPのtime()、JWTのクレーム |
| ミリ秒 | 1735689600000 | 13 | JavaScriptのDate.now()、Java、MongoDB |
| マイクロ秒 | 1735689600000000 | 16 | PostgreSQL、Pythonのtime.time_ns()を1000で割った値 |
| ナノ秒 | 1735689600000000000 | 19 | Go、Prometheus、高分解能のログ |
10桁の数値は2286年11月20日まで10桁のままなので、今世紀の日付なら桁数での判別は安全な目安になります。負の数値は1970年より前の日付で、ほかと同じように変換できます。
タイムゾーンは表示の選択であって、数値の一部ではありません
タイムスタンプにタイムゾーンはありません。同僚が「このログは1時間ずれている」と言うとき、たいていタイムスタンプは一致していて、描画だけが違います。上部でタイムゾーンを切り替えると、同じ数値から別の現地時刻が生まれ、UTCとISO 8601はそのまま動きません。どちら側が別の時計を見ているのかを示すのに、これが一番早い方法です。
サマータイムはタイムゾーンデータベースが処理するので、Europe/Berlinの夏の日付はUTC+02:00、冬の日付はUTC+01:00として、何もしなくても正しく表示されます。
コードで変換する
変換ツールの下のコードタブは、画面上のタイムスタンプの変換をJavaScript、Python、PHP、SQL、Go、Java、C#、Bashで出力するので、その数値が来た場所へそのまま貼り込めます。覚えておきたい落とし穴が2つあります。JavaScriptのnew Date()はミリ秒を求めるため、10桁のタイムスタンプは1000を掛ける必要があります。またMySQLのFROM_UNIXTIME()の結果は、UTCではなくサーバーのタイムゾーンで描画されます。
逆方向の変換
反対側のペインは逆の処理を行います。日付と時刻を選ぶと、秒とミリ秒のタイムスタンプが返ります。その方向には日付をタイムスタンプに変換というページがあり、13桁に特化したミリ秒の変換もあります。数値がDiscordのメッセージから来たものなら、Discordのタイムスタンプが<t:…>という記法を説明し、生成もしてくれます。