タイムスタンプ変換

Unixタイムスタンプと日時を双方向に変換します。10桁(秒)と13桁(ミリ秒)は自動判別し、ローカルタイムゾーンとUTCを切り替えられます。計算はすべてブラウザ内で完結し、データを送信することはありません。
現在のタイムスタンプ(秒)
ミリ秒

タイムゾーン
タイムスタンプ

日付と時刻

説明:
1. タイムスタンプ欄は桁数から単位を判定します。10桁なら秒、13桁ならミリ秒として扱い、判定結果を欄の下に表示します。判定が違っていれば入力をそのまま直してください。
2. 上部のタイムゾーン切り替えは両方向に効きます。UTCにすると「日付と時刻」欄に入れた時刻もUTCとして解釈されます。
3. 1970年より前を表す負のタイムスタンプにも、16桁(マイクロ秒)と19桁(ナノ秒)の入力にも対応しています。
4. 出力欄はどの行もクリックでコピーできます。
5. ページ上部の現在のタイムスタンプは1秒ごとに更新され、値はこの端末のシステムクロックから取っています。端末の時刻がずれていれば、ここの表示もずれます。

Unixタイムスタンプについて

タイムスタンプとはどういう意味か

Unixタイムスタンプは整数で、 1970年1月1日 00:00:00 UTC からある時刻までに経過した秒数を表します。タイムゾーンも書式も持たない、ただの数値です。そこが利点で、世界中のどの機械も同じ瞬間に対して同じ数値を得るため、データベースに保存する、APIに載せる、システム間で受け渡すといった場面で「東京時間か北京時間か」「年月日か月日年か」で意味が揺れることがありません。人間に見せるときになってから、その土地のタイムゾーンで日付に描画すればよいわけです。

つまりタイムスタンプ自体はタイムゾーンを持ちません。「タイムスタンプを日本時間に変換する」と言うときの変換は、保存の段ではなく表示の段で起きています。このページ上部のタイムゾーン切り替えも、変えているのは表示と解釈の仕方だけで、同じタイムスタンプはどちらのタイムゾーンでも同じ瞬間です。

10桁と13桁の違いは何か

10桁は、13桁はミリ秒で、1000倍の違いがあります。実際に使うとき最も間違いやすいのがここです。Javaの System.currentTimeMillis()、JavaScriptの Date.now() が返すのはミリ秒(13桁)ですが、Unixの date +%s、PHPの time()、MySQLの UNIX_TIMESTAMP() が返すのは秒(10桁)です。ミリ秒を秒として解釈すれば西暦57000年あたりになり、秒をミリ秒として解釈すれば1970年1月の上旬になります。

見分け方は簡単で、桁数を数えるだけです。この時代の秒単位のタイムスタンプは10桁、ミリ秒単位は13桁で、しばらくは変わりません。このページは桁数から単位を自動判定し、判定結果を表示します。データが実際には別の単位なら、入力を直せば済みます。まれに16桁(マイクロ秒)や19桁(ナノ秒)にも出会いますが、GoやPythonの高精度なAPIや分散トレーシングでよく使われるもので、このページも認識できます。

なぜ起点が1970年なのか

この起点は Epochと呼ばれ、Unixの初期の実装に由来します。1970年に特別な意味はありません。当時標準を決めた人が、少し前に過ぎたきりのよい年を選んだだけで、そうすれば当時の32ビット整数で前後数十年を表せて都合がよかったのです。その後Unixが広まるにつれ、この取り決めはC、Java、JavaScript、各種データベース、そしてほぼすべてのネットワークプロトコルに受け継がれました。

符号付き32ビット整数で表せる最大の秒数は 2038年1月19日に相当し、それを超えると負数にオーバーフローします。これが「2038年問題」です。今のシステムはおおむね64ビットでの保存に移っており、この上限はもうありませんが、古い機器や古いファームウェア、昔32ビットのフィールドを決め打ちしたプロトコルは今でも引っかかります。反対側では、負のタイムスタンプが1970年より前の時刻を表し、これは正当な値なのでこのページも対応しています。

各言語でタイムスタンプを取得する方法

コマンドラインでは date +%s で秒、date +%s%3N でミリ秒が取れます(Linuxの場合。macOSの date%Nに対応していないので、coreutilsを入れて gdateを使います)。JavaScriptでは Date.now()(ミリ秒)と Math.floor(Date.now()/1000)(秒)です。Pythonでは time.time()で、浮動小数点の秒が返ります。Javaでは System.currentTimeMillis()。PHPでは time()

データベース側では、MySQLは UNIX_TIMESTAMP() で取得し、 FROM_UNIXTIME(ts) で日付に戻します(接続のタイムゾーンで描画される点に注意)。PostgreSQLは EXTRACT(EPOCH FROM now())to_timestamp(ts)を使います。この種の疑問を検索する人は多いのですが、欲しいのはウェブページではなく1行のコードです。そのままコピーしてお使いください。

よくある質問

変換した時刻が合わない、9時間ずれるのはなぜですか?

ほぼタイムゾーンの問題です。日本はUTC+9なので、タイムスタンプをUTCで描画すると日本時間より9時間早く見えます。ページ上部のタイムゾーン切り替えで値が合うなら、原因はこれです。なお、データベースの関数(MySQLの FROM_UNIXTIMEなど)は接続セッションのタイムゾーンで描画するため、サーバーのタイムゾーン設定が正しくない場合も同じだけずれます。

タイムスタンプが秒かミリ秒か、どう見分けますか?

桁数を見てください。10桁は秒、13桁はミリ秒です。このページは自動で判別し、判定結果を表示します。変換結果が1970年1月の上旬になるなら秒をミリ秒として扱っており、数万年後になるならミリ秒を秒として扱っています。

1970年より前の時刻にも対応していますか?

対応しています。1970年より前は負のタイムスタンプで表され、例えば -86400 は1969年12月31日です。そのまま貼り付けるだけで、追加の設定は要りません。

現在のタイムスタンプは正確ですか?

値はこの端末のシステムクロックから取っており、当サイトのサーバーとは無関係です(当サイトのツールはすべてブラウザ内で動きます)。端末の時刻がずれていれば、ここの表示も同じだけずれます。正確な時刻が必要な場合は、先にシステムクロックを合わせてください。

2038年問題はこのページに影響しますか?

しません。JavaScriptは時刻を倍精度浮動小数点数で保持し、表せる範囲は32ビット整数よりはるかに広いため、2038年より後のタイムスタンプも問題なく変換できます。影響を受けるのは、今も符号付き32ビット整数で時刻を保存しているシステムです。

タイムスタンプとISO 8601の違いは何ですか?

タイムスタンプは数値、ISO 8601はテキストの書式です(例: 2026-08-17T12:00:00.000Z)。前者はコンパクトで計算や比較に向き、後者は人がそのまま読めてタイムゾーンの情報も持っています。APIではどちらもよく使われるので、このページは両方の形式を同時に出力します。

データは送信されますか?

いいえ。変換にはブラウザ内蔵の Date オブジェクトを使っており、計算は完全にローカルで、リクエストは一切発生しません。ページを読み込んだあとにネットワークを切っても、このツールはそのまま使えます。詳しくはプライバシーポリシー

ほかに開発者向けのツールはありますか?

あります。JSON 整形はAPIが返したデータ構造の確認に、Base64エンコード・デコードはエンコードの問題に使えます。MD5SHA-256 はダイジェストの計算やファイルの検証に使います。