Unixタイムスタンプとは?
Unixタイムスタンプ(エポック時間、POSIX時間とも呼ばれます)とは、協定世界時(UTC)の1970年1月1日 00:00:00 から経過した秒数のことです。なお、うるう秒はカウントに含まれません。タイムゾーンやカレンダーの表記形式に左右されることなく、コンピューターが「ある瞬間」を保存するための世界共通の方法です。この計算ツールでは、ミリ秒単位のタイムスタンプ(JavaScriptのDate.now()など、多くのプログラミング言語が返す単位)を入力すると、エポックからの秒・分・日数に変換します。
使い方
入力欄にミリ秒単位のUnix時間を入力して送信するだけです。ツールは1000で割って小数を切り捨て(floor)、整数秒のUnix秒を算出します。これはデータベースやAPI、Linuxのdate +%sなどで最も一般的に使われる形式です。結果の表には、元のミリ秒の値に加えて、経過した分数・日数も表示されるので、値が妥当かどうかをすばやく確認できます。
計算式の解説
基本となる変換は $$\text{Seconds} = \left\lfloor \frac{\text{Time (ms)}}{1000} \right\rfloor$$ です。1000で割ることでミリ秒を秒に換算し、floor(切り捨て)で小数部分を取り除くことで、整数秒のタイムスタンプが得られます。分は \(\left\lfloor \frac{M}{60000} \right\rfloor\)、日数は \(\left\lfloor \frac{M}{86400000} \right\rfloor\) で求めます。1日は86,400秒=86,400,000ミリ秒だからです。
計算例
たとえば \(M = 1{,}700{,}000{,}000{,}000\) とします。すると $$\text{Seconds} = \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000$$ 秒となり、これは2023年11月14日に相当します。エポックからの分数は \(\left\lfloor \frac{1{,}700{,}000{,}000{,}000}{60000} \right\rfloor = 28{,}333{,}333\)、日数は \(\left\lfloor \frac{1{,}700{,}000{,}000{,}000}{86{,}400{,}000} \right\rfloor = 19{,}675\) です。
よくある質問(FAQ)
なぜミリ秒ではなく秒を使う場面があるのですか? 古いシステムや多くのAPI(Unix、PostgreSQL、JWTのexpクレームなど)は秒単位で保存しますが、ブラウザやJavaはミリ秒単位を使います。両者の変換は、1000を掛けるか割るかするだけです。
うるう秒はどう扱われますか? Unix時間はうるう秒を無視するため、きれいな直線的な秒数になります。計算には便利ですが、天文学的なUTCとは厳密には一致しません。
2038年問題で動かなくなりますか? 秒数を符号付き32ビット整数で保存しているシステムは、2038年1月19日にオーバーフローします。現代の64ビットシステムは影響を受けません。