什麼是 Unix 時間?
Unix 時間(也稱為 Epoch 時間、POSIX 時間或 Unix 時標)是一種描述時間點的系統。它是自 Unix 時代(定義為 1970 年 1 月 1 日星期四 UTC 00:00:00)以來經過的秒數。它在類 Unix 作業系統和許多其他計算系統中被廣泛使用。
Unix 時間的主要優點在於其簡單性。它將時間表示為一個單一、普遍理解的整數,且不斷增加。這使得存儲、比較和計算時間戳變得極為容易,而無需擔心時區、夏令時或不同的日曆系統。例如,要找出兩個事件之間的持續時間,只需相減它們的 Unix 時間戳即可。
雖然這個原始數字對電腦來說非常適合,但對人類來說並不太友善。為了彌合這個差距,開發者和科技愛好者使用一個叫做 時代轉換器 的工具。你可以用它立即將任何時間戳轉換成人類可讀的日期,或反向操作,找到特定日期的時間戳。
2038 年問題
一個與 Unix 時間相關的著名問題是「2038 年問題」。它與 Y2K 問題類似。許多早期的計算機系統被設計為將 Unix 時間戳存儲為 32 位帶符號整數。一個帶符號的 32 位整數可以表示的值範圍是 -2,147,483,648 到 2,147,483,647。
最大值 2,147,483,647
將在 2038 年 1 月 19 日 UTC 03:14:07 達到。下一秒,整數將溢出並回繞到其最小值,系統會將其解讀為 1901 年的日期。這可能導致依賴 32 位時間表示的遺留軟體出現廣泛故障。
解決方案是使用 64 位整數來存儲時間戳。64 位整數的最大值非常大,大約可以存儲 292 億年,幾乎可以解決未來可預見的問題。大多數現代作業系統和軟體已經轉向使用 64 位時間表示。
閏秒與 Unix 時間
一個重要的技術細節是 Unix 時間不考慮閏秒。雖然 UTC(協調世界時)偶爾會加入閏秒以保持與地球自轉同步,但 Unix 時標會忽略它們,並持續線性計數。
這意味著 Unix 時間並不是真正的 UTC 表示。更準確地說,它是秒數的線性計數。當閏秒發生時,Unix 時間有時會重複一秒以保持同步。這個細微差別對科學和高精度應用非常重要,但對大多數通用計算來說,差異可以忽略。
Unix 時間的常見用途
- 檔案時間戳: 作業系統使用 Unix 時間戳來追蹤檔案的建立、修改或最後存取時間。
-
資料庫:
這是一種存儲記錄(例如
created_at
、updated_at
)日期和時間資訊的常用且高效的方法。 - API 和網頁開發: 用於會話過期、快取控制和 API 請求的日誌記錄。
- 程式設計: 幾乎所有程式語言都提供函數來獲取當前的 Unix 時間戳,並將其轉換為人類可讀的日期格式,或反向操作。