変換した時刻が合わない、9時間ずれるのはなぜですか?
ほぼタイムゾーンの問題です。日本はUTC+9なので、タイムスタンプをUTCで描画すると日本時間より9時間早く見えます。ページ上部のタイムゾーン切り替えで値が合うなら、原因はこれです。なお、データベースの関数(MySQLの FROM_UNIXTIMEなど)は接続セッションのタイムゾーンで描画するため、サーバーのタイムゾーン設定が正しくない場合も同じだけずれます。
Unixタイムスタンプは整数で、 1970年1月1日 00:00:00 UTC からある時刻までに経過した秒数を表します。タイムゾーンも書式も持たない、ただの数値です。そこが利点で、世界中のどの機械も同じ瞬間に対して同じ数値を得るため、データベースに保存する、APIに載せる、システム間で受け渡すといった場面で「東京時間か北京時間か」「年月日か月日年か」で意味が揺れることがありません。人間に見せるときになってから、その土地のタイムゾーンで日付に描画すればよいわけです。
つまりタイムスタンプ自体はタイムゾーンを持ちません。「タイムスタンプを日本時間に変換する」と言うときの変換は、保存の段ではなく表示の段で起きています。このページ上部のタイムゾーン切り替えも、変えているのは表示と解釈の仕方だけで、同じタイムスタンプはどちらのタイムゾーンでも同じ瞬間です。
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や分散トレーシングでよく使われるもので、このページも認識できます。
この起点は 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行のコードです。そのままコピーしてお使いください。
ほぼタイムゾーンの問題です。日本はUTC+9なので、タイムスタンプをUTCで描画すると日本時間より9時間早く見えます。ページ上部のタイムゾーン切り替えで値が合うなら、原因はこれです。なお、データベースの関数(MySQLの FROM_UNIXTIMEなど)は接続セッションのタイムゾーンで描画するため、サーバーのタイムゾーン設定が正しくない場合も同じだけずれます。
桁数を見てください。10桁は秒、13桁はミリ秒です。このページは自動で判別し、判定結果を表示します。変換結果が1970年1月の上旬になるなら秒をミリ秒として扱っており、数万年後になるならミリ秒を秒として扱っています。
対応しています。1970年より前は負のタイムスタンプで表され、例えば -86400 は1969年12月31日です。そのまま貼り付けるだけで、追加の設定は要りません。
値はこの端末のシステムクロックから取っており、当サイトのサーバーとは無関係です(当サイトのツールはすべてブラウザ内で動きます)。端末の時刻がずれていれば、ここの表示も同じだけずれます。正確な時刻が必要な場合は、先にシステムクロックを合わせてください。
しません。JavaScriptは時刻を倍精度浮動小数点数で保持し、表せる範囲は32ビット整数よりはるかに広いため、2038年より後のタイムスタンプも問題なく変換できます。影響を受けるのは、今も符号付き32ビット整数で時刻を保存しているシステムです。
タイムスタンプは数値、ISO 8601はテキストの書式です(例: 2026-08-17T12:00:00.000Z)。前者はコンパクトで計算や比較に向き、後者は人がそのまま読めてタイムゾーンの情報も持っています。APIではどちらもよく使われるので、このページは両方の形式を同時に出力します。
いいえ。変換にはブラウザ内蔵の Date オブジェクトを使っており、計算は完全にローカルで、リクエストは一切発生しません。ページを読み込んだあとにネットワークを切っても、このツールはそのまま使えます。詳しくはプライバシーポリシー。
あります。JSON 整形はAPIが返したデータ構造の確認に、Base64エンコード・デコードはエンコードの問題に使えます。MD5 と SHA-256 はダイジェストの計算やファイルの検証に使います。