Unixタイムスタンプとは?
Unixタイムスタンプ(エポック時間、POSIX時間とも呼ばれます)とは、協定世界時(UTC)の1970年1月1日 00:00:00 ——いわゆる「Unixエポック」——からの経過秒数を表した数値です(うるう秒は含みません)。タイムゾーンに左右されず、ある瞬間を1つの数値として記録できるため、コンピューターが時刻を扱う際の世界共通の方式となっています。このツールは、ミリ秒で入力した値を標準的なUnixタイムスタンプ(秒)に変換し、あわせてエポックからの経過分数・時間数・日数も表示します。
使い方
時刻をミリ秒単位で入力してください。現在のUnixタイムスタンプ(いわゆる「エポックナウ」)を求めたい場合は、現在時刻をミリ秒で指定します(初期値は例として入力済みです)。ツールは入力値を1,000で割って小数点以下を切り捨て、整数の秒数を算出します。これは、ほぼすべてのAPI・データベース・プログラミング言語で標準的に使われる形式です。
計算式の解説
変換の基本となる式は $$\text{Epoch} = \left\lfloor \dfrac{\text{Time (ms)}}{1000} \right\rfloor$$ です。ミリ秒は1,000分の1秒の精度を持ちますが、従来のUnixタイムスタンプは秒単位で表されるため、小数部分を切り捨て(floor)ます。さらに、求めたエポック秒を60・3,600・86,400で割れば、それぞれ経過分数・時間数・日数が得られます。
$$\begin{gathered} \text{Epoch} = \left\lfloor \dfrac{\text{Time (ms)}}{1000} \right\rfloor \\[1.5em] \text{where}\quad \left\{ \begin{aligned} \text{Minutes} &= \left\lfloor \tfrac{\text{Epoch}}{60} \right\rfloor \\ \text{Hours} &= \left\lfloor \tfrac{\text{Epoch}}{3600} \right\rfloor \\ \text{Days} &= \left\lfloor \tfrac{\text{Epoch}}{86400} \right\rfloor \end{aligned} \right. \end{gathered}$$
計算例
たとえば現在時刻が 1,700,000,000,000 ミリ秒だとします。これを1,000で割ると 1,700,000,000 秒となり、これがUnixタイムスタンプです。さらに \(1{,}700{,}000{,}000 \div 86{,}400\) を切り捨てると 19,675 日となり、1970年1月1日から数えて2023年11月中旬に相当することがわかります。
$$\left\lfloor \dfrac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000$$
$$\left\lfloor \dfrac{1{,}700{,}000{,}000}{86{,}400} \right\rfloor = 19{,}675$$
よくある質問
なぜミリ秒ではなく秒なのですか? 元々のUnix標準が秒を採用しているためです。JavaScriptの Date.now() はミリ秒を返すので、1,000で割って秒に変換するケースがよくあります。
タイムゾーンには対応していますか? いいえ。Unix時間は常にUTC基準です。同じ瞬間であれば、地球上のどこでもタイムスタンプの値は同一になります。
「2038年問題」とは何ですか? タイムスタンプを符号付き32ビット整数で保持しているシステムは、2038年1月19日にオーバーフロー(桁あふれ)を起こします。現在主流の64ビットシステムではこの問題は発生しません。