紀元時間戳詳解:Unix 時間、POSIX 時間與自 1970 年起的秒

紀元時間戳是把某個時刻表示為自固定起點以來經過時間的精簡方式。本指南解釋 Unix 時間、POSIX 時間戳、Unix 紀元日期,以及為什麼自 1970 年 UTC 起的秒成為軟體中的預設值。

什麼是 epoch 時間戳?

epoch 時間戳是從一個稱為 epoch 的固定參考時刻起測量的數字計數。在開發者日常用法中,epoch 時間戳通常指 Unix 時間戳:自 1970 年 1 月 1 日 00:00:00 UTC 起的秒數。值為 0 即精確的 Unix 紀元。正值在 1970 年之後,負值在之前。

Unix 時間 vs POSIX 時間戳

在應用程式碼中,Unix 時間與 POSIX 時間戳通常可互換使用。兩者都指自 Unix 紀元起經過的秒數,為簡化民用時間而忽略閏秒。實際結果是一個穩定的整數,可跨作業系統、語言、資料庫、API 與日誌檔案使用。

  • Unix 紀元日期:1970-01-01 00:00:00 UTC
  • Unix 時間戳 0:Unix 紀元的精確起點
  • POSIX 時間戳:POSIX 相容系統中自 Unix 紀元起的秒
  • epoch 毫秒:同一紀元,但以毫秒計
  • epoch 微秒或奈秒:用於資料庫與追蹤的更高精度

為什麼以 1970 年為起點的時間戳成為標準

Unix 紀元對早期 Unix 系統很實用,隨著 Unix 思想擴展到 C 函式庫、Linux、資料庫、Web 伺服器與程式語言,它成為慣例。單個數字時間戳比本地化的日期字串更易於排序、比較、傳輸與儲存。

epoch 時間戳範例

幾個已知的值能讓定義更容易記住。

  • 0 = 1970-01-01 00:00:00 UTC
  • 1 = 1970-01-01 00:00:01 UTC
  • 86400 = 1970-01-02 00:00:00 UTC
  • 1700000000 = 2023-11-14 22:13:20 UTC
  • 1767225600 = 2026-01-01 00:00:00 UTC

epoch 時間戳常見問題

epoch 時間和 Unix 時間一樣嗎?
在開發者常見用法中,是的。epoch 時間通常指 Unix 時間:自 1970-01-01 00:00:00 UTC 起經過的秒數。
Unix 時間的定義是什麼?
Unix 時間定義為自 1970-01-01 00:00:00 UTC 起的秒數,不計閏秒。
POSIX 時間戳是否帶時區?
不帶。POSIX 時間戳表示一個瞬間。只有在把該瞬間格式化為可讀日期時才套用時區。
epoch 時間戳在 Windows、Linux 與 macOS 上一樣嗎?
Unix 紀元(1970-01-01 00:00:00 UTC)在現代平台與語言中是一致的,因此同一瞬間在各處都得到相同的 Unix 時間戳。Windows 內部使用自己的 FILETIME 紀元(1601),但標準的 Unix 與 POSIX 時間戳使用 1970 年。