Unixタイムスタンプとは
Unixタイムスタンプ(Unix timestamp)とは、1970年1月1日 00:00:00 UTC(Unixエポック)からの経過秒数を整数で表した値です。「epoch秒」とも呼ばれます。
たとえば、1748000000というタイムスタンプは、エポックから1,748,000,000秒が経過した時点を指します。これは日本時間(JST)で2025年5月23日頃に相当します。
なぜUnixタイムスタンプが使われるのか
日時を人間が読みやすい形式(「2025年5月1日 12:00:00」)で保存すると、タイムゾーン・フォーマット・言語の違いによる複雑さが生じます。Unixタイムスタンプを使うことで以下の問題を解消できます。
- タイムゾーン非依存:UTCを基準にした単一の数値なので、どの国でも同じ瞬間を指す。
- 計算が簡単:2つのタイムスタンプの差を引くだけで経過秒数がわかる。
- 保存・比較が高速:整数値のため、文字列の日付よりDBでのソート・比較が効率的。
秒(10桁)とミリ秒(13桁)の違い
Unixタイムスタンプには2種類あります。
- 秒単位(10桁):例
1748000000。多くのAPIやサーバーサイド処理で使用される標準形式。 - ミリ秒単位(13桁):例
1748000000000。JavaScriptのDate.now()が返す形式。1秒を1000分割した精度が必要な場合に使用。
桁数で見分けるのが最も簡単な方法で、13桁以上ならミリ秒と判断できます。
プログラムでの取得方法
各言語でのUnixタイムスタンプ取得方法を紹介します。
- JavaScript:
Math.floor(Date.now() / 1000)(秒)、Date.now()(ミリ秒) - Python:
import time; int(time.time()) - PHP:
time() - Go:
time.Now().Unix() - SQL(MySQL):
UNIX_TIMESTAMP()
2038年問題とは
32ビット整数でUnixタイムスタンプを保存しているシステムでは、2038年1月19日 03:14:07 UTCにオーバーフローが発生する「2038年問題」があります。現代のシステムは64ビット整数を使用するためほぼ問題ありませんが、古いCやC++で書かれたシステムでは注意が必要です。