Unixタイムスタンプ変換

1970年からの秒(またはミリ秒)を日付に、日付をその数字に変えます。二つの単位を取り違えると1,000倍ずれるので、大きさから単位を推し量り、どちらとして読んだかを結果に明記します。

今

—

· ms

入れたものが端末から出ることはありません。 時刻はこのブラウザの時間帯の設定に従います。

Unix 時間とは

1970年1月1日0時 UTC から流れた秒を数えたものです。時間帯を持たないので、東京でもロンドンでも同じ瞬間は同じ数字です。ログやデータベースが好んで使うのはそのためです。うるう秒は数えず、一日は常に 86,400 秒として扱います。1970年より前は負の数になります。

秒・ミリ秒・そのほかの単位

JavaScript の Date.now() と Java の currentTimeMillis() はミリ秒、Python の time.time() と多くのデータベースは秒です。ここでは絶対値が 1e11 を超えればミリ秒とみなします。マイクロ秒(16桁)はミリ秒と誤読されて数千年先の日付になるので、結果が途方もないときは「読んだ単位」の行から確かめてください。日付にできない値(±8.64e15ms の外)と .NET のティック(18桁)は「読めませんでした」になります。

日付の文字列を読む規則

数字でなければブラウザの Date.parse に任せます。末尾に Z や +09:00 が付いていればその時間帯で、2026-08-14 のように日付だけなら UTC の0時として、2026-08-14 09:30 のように時刻はあるが時間帯が無ければこの端末の時間帯で読みます。日付だけを入れたときに9時間ずれて見えるのは、この規則のためです。

結果の行の読み方

ISO 8601 の行は常に UTC で、末尾に Z が付きます。API に渡すときはこれを使えば時間帯で揉めません。その下に UTC、この端末の時間帯で見た時刻、今からの距離が並びます。現在時刻は1秒ごとに数え直し、ページが開いた後にはじめて埋まります。

数字としても日付としても読めないもの

数字として見るのは、先頭の - だけを許した十七桁までの整数です。1700000000.5 のように小数点が入ったもの、1,700,000,000 のように桁をコンマで区切ったもの、+ を付けたものは、数字としても日付としても読めません。日付の側はブラウザに任せるので少しずつ違いますが、Chrome は 2026/08/14・Aug 14 2026 を読み、14.08.2026 は読めません。気をつけたいのは 20260814 のように日付を詰めて書いた八桁です。エラーにならず秒として読まれ、1970年8月のどこかの日が出ます。

0 と負の数、そして桁の境目

0 は 1970年1月1日 0時 UTC で、負の数はそれより前です。-1 は UTC で 1969年12月31日 23時59分59秒です。秒とミリ秒を分ける 1e11 は、秒なら 5138年、ミリ秒なら 1973年3月3日にあたるので、1973年3月より前のミリ秒の値は十二桁に届かず秒として読まれます。

よくある質問

秒とミリ秒をどう見分けますか

大きさで見分けます。1e11を超える値はミリ秒として読みます — それを秒として読むと5138年になってしまうからです。どちらとして読んだかは結果に出るので、確かめられます。

タイムスタンプに時間帯は入っていますか

入っていません。1970年1月1日のUTC午前0時 からの秒数でしかないので、数字だけではどこの時刻かを語りません。同じ値をソウルで読めばUTCより9時間後に見えます — 二つのログが9時間ずれて見えるとき、たいていこれが答えです。

2038年問題とは何ですか

タイムスタンプを符号付き32ビット整数で持つシステムは、2038年1月19日に収められる最大値を超えて負の数に折り返します。今の言語はたいてい64ビットですが、古いCのコードやデータベースの列の型には今も残っています。

ミリ秒を秒にするには

1,000で割ります。切り捨てるか四捨五入するかで1秒ずれることがあるので、ログを突き合わせるなら両側で同じにしてください。

小数点の付いたタイムスタンプは?

読めません。time.time() が返す 1700000000.123 のような値は、小数を落として整数の秒で入れるか、千倍して整数のミリ秒で入れてください。

貼り付けたものはサーバへ送られますか

送られません。すべてブラウザの中で動き、送信も保存もしません。だからこそ、ふつうならウェブページに貼り付けない社内の設定ファイルや本番のクエリにも使えます。通信を切ったままでも動きます。