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タイムスタンプ取得方法を紹介します。

  • JavaScriptMath.floor(Date.now() / 1000)(秒)、Date.now()(ミリ秒)
  • Pythonimport time; int(time.time())
  • PHPtime()
  • Gotime.Now().Unix()
  • SQL(MySQL)UNIX_TIMESTAMP()

2038年問題とは

32ビット整数でUnixタイムスタンプを保存しているシステムでは、2038年1月19日 03:14:07 UTCにオーバーフローが発生する「2038年問題」があります。現代のシステムは64ビット整数を使用するためほぼ問題ありませんが、古いCやC++で書かれたシステムでは注意が必要です。