Unixタイムスタンプとは?|2038年問題と変換の仕組み

プログラミング 基礎知識 データベース
結論

Unixタイムスタンプは**「1970年1月1日午前0時0分0秒(UTC)からの経過秒数」**。タイムゾーンに依存せず一意に時間を表現できるため、システム間のデータ交換に最適です。

なぜ「秒数」で管理するのか

「2024年5月2日」という表記は、国や言語によって順序がバラバラ(年/月/日、月/日/年など)です。これを一つの大きな整数(秒数)に置き換えることで、コンピュータは日時の比較や計算(1時間後を求めるなど)を非常に高速に行うことができます。

⏰ この場でタイムスタンプを変換する

現在のタイムスタンプ:

恐怖の「2038年問題」とは?

古いシステム(32ビットの整数を使用している場合)では、経過秒数が 2,147,483,647 を超える 2038年1月19日 3時14分7秒 (UTC) に、桁あふれが発生して1901年に戻ってしまうバグのことです。

現代の対策

現在のほとんどの64ビットシステムでは、この上限が天文学的な数値(2922億年後まで)に拡張されているため、直接的な影響は少なくなっています。しかし、古い組み込み機器や古いデータベース定義(INT型でタイムスタンプを保存している場合など)では今でも注意が必要です。

JavaScriptでの扱い

// 現在のタイムスタンプ(ミリ秒)
const ms = Date.now();

// 秒に変換
const sec = Math.floor(ms / 1000);

JavaScriptの Date オブジェクトは内部的にミリ秒で保持しているため、APIとのやり取りで「秒」が求められている場合は、1000で割る処理を忘れないようにしましょう。