什麼是 Unix 時間?
Unix 時間(亦稱為 Epoch 時間、POSIX 時間或 Unix 時標)是一種描述時間點的系統。它是自 Unix Epoch(定義為 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 時標,並將其轉換為人類可讀的日期格式,或反之。