epoch時間(UNIX時間)とは?
epoch(エポック)時間は、UNIX時間やUnixタイムスタンプとも呼ばれ、Unixエポックと呼ばれる1970年1月1日 00:00:00(UTC)から経過した秒数のことです。たとえば 1700000000 は2023年11月14日 22:13:20(UTC)です。
コンピューターがこの方法で時刻を保存するのは、1つの数値なら比較、並べ替え、システム間の受け渡しが簡単で、世界中どこでも同じ瞬間を表せるからです。タイムゾーンが関係するのは、人が読める日時に変換するときだけです。UNIX時間はうるう秒を無視し、1日を常にちょうど86,400秒として数えます。

秒、ミリ秒、マイクロ秒、ナノ秒の見分け方
タイムスタンプには精度の異なる種類があります。変換ツールは桁数から単位を判別しますが、単位メニューで手動指定することもできます。
従来のUnixタイムスタンプで、Linux、PHP、Pythonの time.time()(浮動小数点数)、JWTの exp クレーム、ほとんどのAPIで使われています。例:1700000000。
JavaScript(Date.now())、Java、多くのデータベースやログで使われています。例:1700000000000。
Goの UnixMicro() や、多くの高精度なログやトレースで使われています。例:1700000000000000。
Goの UnixNano()、InfluxDB、監視システムで使われています。例:1700000000000000000。
Advertisement
Unixタイムスタンプを日時に変換する方法
タイムスタンプ→日時 タブに入力します。カンマ、スペース、小数部(1700000000.5 など)を含んでいても問題なく、負の値を入れると1970年より前の日時になります。
バッジに、秒、ミリ秒、マイクロ秒、ナノ秒のどれとして読み取ったかが表示されます。判定が違う場合は、単位を自分で選んでください。
UTCと自分のタイムゾーンの日時、ISO 8601、RFC 2822、現在からどれくらい前か、さらに同じ瞬間を4つの単位すべてで表示します。
リストから任意のタイムゾーンを選ぶと、同じ瞬間の現地時刻が表示されます。たとえば、海外の同僚にとってログの記録がいつだったかを確認するときに便利です。
日時をUnixタイムスタンプに変換する方法
日時→タイムスタンプ タブを開き、日付と時刻を選んで、その日時のタイムゾーンを指定します。秒とミリ秒のepoch時間に加え、UTCのISO 8601形式が表示されます。
同じパネルには、選んだタイムゾーンでのその日、月、年の最初と最後の秒も表示されます。「ニューヨーク時間で10月に発生したすべての注文」のように、期間の開始と終了のタイムスタンプが必要なデータベースのクエリで役立ちます。
Advertisement
タイムゾーンと夏時間
Unixタイムスタンプにはタイムゾーンがありません。常にUTCの1970年1月1日 0時から数えます。同じタイムスタンプが場所によって異なる時計の時刻で表示されるだけで、たとえば 1700000000 はロンドンでは22:13、インドでは翌朝の03:43になります。
タイムゾーンが重要になるのは、日時をタイムスタンプに変換するときです。時計を戻すときには同じ時刻が2回現れ、時計を進めるときには存在しない時刻が生じます。米国で時計が進む夜には、ニューヨークの02:30は存在しません。このツールはどちらの場合もPythonと同じ方法で処理します。存在しない時刻はずれた分だけ先に進め、2回現れる時刻は1回目を使います。
2038年問題
古いシステムはUNIX時間を符号付き32ビット整数で保存しており、その上限は 2147483647、つまり2038年1月19日 03:14:07(UTC)です。その1秒後に数値がオーバーフローして負の値になり、そうしたシステムは日付を1901年12月13日と解釈してしまいます。
最近のOSやプログラミング言語の多くは64ビットの時刻を使っているため影響を受けませんが、組み込み機器、古いファイル形式、一部のレガシーコード、MySQLの TIMESTAMP 型(2038-01-19 03:14:07 UTCまで)は今も影響を受けます。この変換ツールは32ビットの範囲を超えるタイムスタンプに警告を表示するので、古いソフトウェアで問題を起こしうる値を見つけられます。
Advertisement
プログラムで現在のepoch時間を取得する
どの言語やシェルでも、UNIX時間の取得と変換ができます。
Math.floor(Date.now() / 1000) // 秒
Date.now() // ミリ秒
new Date(1700000000 * 1000).toISOString() // '2023-11-14T22:13:20.000Z'import time, datetime
int(time.time()) # 秒
datetime.datetime.fromtimestamp(1700000000, datetime.timezone.utc)
# 2023-11-14 22:13:20+00:00date +%s # 現在のepoch秒
date -u -d @1700000000 # Linux (GNU date)
date -u -r 1700000000 # macOS (BSD date)-- PostgreSQL
SELECT extract(epoch FROM now());
SELECT to_timestamp(1700000000);
-- MySQL
SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(1700000000);time(); // PHP
date('c', 1700000000);
time.Now().Unix() // Go
Instant.now().getEpochSecond() // Java=(A1/86400)+DATE(1970,1,1) // A1のepoch秒をUTCの日時に変換
=(B1-DATE(1970,1,1))*86400 // B1のUTCの日時をepoch秒に変換主なUnixタイムスタンプ
0:1970年1月1日 00:00:00(UTC)、Unixエポック。1000000000:2001年9月9日 01:46:40(UTC)、最初の10桁のタイムスタンプ。1234567890:2009年2月13日 23:31:30(UTC)。1700000000:2023年11月14日 22:13:20(UTC)。1800000000:2027年1月15日 08:00:00(UTC)。2000000000:2033年5月18日 03:33:20(UTC)。2147483647:2038年1月19日 03:14:07(UTC)、32ビットの上限。4294967295:2106年2月7日 06:28:15(UTC)、符号なし32ビットの上限。
Advertisement
その他の開発者ツール
開発者やシステム管理者向けのその他の無料ツールです。すべてブラウザ内で動作します。