ブログに戻る

Unixタイムスタンプ解説:エポック時間とは?

·6 分で読める

1749673200のような数字を見て、それが日付と時刻を表すと言われたことがあるなら、それはUnixタイムスタンプです。「エポック時間」や「Unix時間」とも呼ばれるこのシステムは、コンピューターが時間を追跡する仕組みの基幹です。詳しく解説しましょう。

Unixタイムスタンプとは?

Unixタイムスタンプは、1970年1月1日 00:00:00 UTC(「Unixエポック」と呼ばれる)からの経過秒数です。この起点は、1970年代初頭にUnixオペレーティングシステムが開発されたときにやや任意に選ばれました。

例:

  • 0 = 1970年1月1日 00:00:00 UTC
  • 1000000000 = 2001年9月9日 01:46:40 UTC
  • 1749673200 = 2026年6月12日 01:00:00 UTC
  • なぜ有用なのか?

    Unixタイムスタンプにはコンピューティングにおいていくつかの利点があります:

  • タイムゾーン非依存。 Unixタイムスタンプは地球上のどこでも同じ瞬間を表します。どのタイムゾーンを指すかの曖昧さがありません。
  • 簡単な計算。 3600秒後の時刻を知りたい?タイムスタンプに3600を足すだけです。2つの瞬間の差を知りたい?タイムスタンプを引き算するだけです。
  • コンパクトな保存。 1つの整数で完全な日付と時刻を保存できます。
  • 普遍的な互換性。 すべてのプログラミング言語とデータベースはUnixタイムスタンプを扱えます。
  • 実践におけるUnixタイムスタンプ

    JavaScript

    ``javascript

    // 現在のタイムスタンプを取得

    Date.now() // ミリ秒を返す

    Math.floor(Date.now() / 1000) // 秒を返す

    // タイムスタンプを日付に変換

    new Date(1749673200 * 1000)

    `

    Python

    `python

    import time

    time.time() # 現在のタイムスタンプ(秒)

    time.gmtime(1749673200) # struct_timeに変換

    `

    データベース

    ほとんどのデータベースは内部的にUnix時間や類似の表現でタイムスタンプを保存します:

  • PostgreSQL: EXTRACT(EPOCH FROM NOW())
  • MySQL: UNIX_TIMESTAMP()
  • MongoDB: エポックからのミリ秒として日付を保存
  • 2038年問題

    興味深い問題があります:多くのシステムはUnixタイムスタンプを32ビット符号付き整数として保存しており、表現できる最大値は2,147,483,647です。これは2038年1月19日 03:14:07 UTCに対応します。

    この瞬間の後、タイムスタンプはオーバーフローして負の数になり、システムが日付を1901年として解釈する可能性があります。これはUnixシステムにとってのY2K問題に似ています。

    解決策はシンプルです:64ビット整数を使えば、何十億年も未来の日付を表現できます。ほとんどのモダンなシステムはすでにこの移行を完了していますが、レガシーシステムはまだリスクがあるかもしれません。

    ミリ秒タイムスタンプ

    一部のシステムはより高い精度のために秒ではなくミリ秒を使用します:

  • JavaScriptのDate.now()はミリ秒を返す
  • JavaのSystem.currentTimeMillis()はミリ秒を使用
  • 秒のタイムスタンプに1000を掛けるとミリ秒になります
  • 面白いタイムスタンプ

  • 1234567890 = 2009年2月13日 23:31:30 UTC —世界中のギークが祝った
  • 1111111111 = 2005年3月18日 01:58:31 UTC
  • 1500000000` = 2017年7月14日 02:40:00 UTC