エポック秒(UNIXタイムスタンプ)とは
エポック秒とは、1970年1月1日 00:00:00 UTC(協定世界時)を起点(エポック)とした経過秒数のことです。 UNIX系OSでの標準的な時刻表現であり、プログラミング言語やデータベースで広く使われています。 タイムゾーンに依存しない一意な時刻表現であるため、システム間の日時データのやり取りに適しています。
なぜ1970年が基準なのか
1970年1月1日が基準に選ばれたのは、UNIXオペレーティングシステムの開発時期に由来します。 UNIXは1969年に開発が始まり、初期のシステムクロックとして「キリの良い」近い過去の日付が採用されました。 当時の32ビット符号付き整数で十分な範囲をカバーできる起点として、1970年1月1日が選ばれました。
秒とミリ秒の違い
エポック秒には主に2つの精度があります。
- 秒(10桁): UNIX標準。C言語の
time()、PHPのtime()、Pythonのtime.time()など。 - ミリ秒(13桁): JavaScriptの
Date.now()、JavaのSystem.currentTimeMillis()など。
このツールでは入力の桁数から自動判定するほか、手動で単位を指定することもできます。
プログラミング言語での取得方法
JavaScript / TypeScript
// ミリ秒(13桁) Date.now() // 秒(10桁) Math.floor(Date.now() / 1000)
Python
import time # 秒(float) time.time() # 秒(整数) int(time.time())
PHP
// 秒(10桁) time() // ミリ秒 round(microtime(true) * 1000)
Java
// ミリ秒(13桁) System.currentTimeMillis() // 秒(10桁) Instant.now().getEpochSecond()
2038年問題(Y2K38)
32ビット符号付き整数でエポック秒を表現した場合、最大値は 2,147,483,647(2038年1月19日 03:14:07 UTC)です。 この時刻を超えるとオーバーフローが発生し、日時が1901年に戻ってしまう問題を「2038年問題」と呼びます。
現代の64ビットシステムでは事実上この問題は発生しませんが、 組込みシステムやレガシーなデータベースでは依然として注意が必要です。 このツールでは西暦1000年〜9999年の範囲に対応しています。