什麼是 Epoch 時間戳(Unix 時間)?為什麼計算機要使用它?
Unix 時間的起源
要真正理解 Epoch 時間戳(通常稱為 Unix 時間、POSIX 時間或簡稱 Epoch),我們必須追溯到 1970 年代初期 Unix 操作系統的起源。Unix 時間是一種將時間追蹤為累計總秒數的系統。具體而言,它代表自 1970 年 1 月 1 日星期四 00:00:00 協調世界時(UTC)以來所經過的秒數。
當 Ken Thompson 與 Dennis Ritchie 在貝爾實驗室開發第一版 Unix 時,他們需要一種簡單且高效的方法讓計算機表示和儲存日期與時間。對於計算機來說,人類可讀的日期(例如「2026年7月29日」)處理起來極為複雜。它們涉及不規則的月份(有些是 28、29、30 或 31 天)、閏年、時區以及夏令時間切換。透過將時間表示為單個持續遞增的整數,Unix 開發人員創建了一個通用、無歧義的時間標準,可以輕鬆進行儲存、比較和數學運算。
為什麼現今開發人員仍使用 Epoch 時間戳
即使數十年過去,Epoch 時間仍然是現代計算基礎架構的基石。以下是它被廣泛採用的原因:
- 簡單與高效:儲存一個 32 位元或 64 位元的整數比儲存格式化的日期字串佔用更少的磁碟空間和記憶體。當資料庫包含數十億條記錄時,每行節省幾個位元組就能大幅降低儲存成本並提升資料庫索引效能。
- 不受時區影響(Time Zone Agnostic):Epoch 時間戳本質上與 UTC 綁定。它不在乎使用者身在何處。當東京的伺服器與紐約的客戶端通訊時,傳輸 Epoch 整數可以避免任何關於時區的混淆。客戶端在接收到整數後,只需將其轉換為當地時區即可。
- 輕鬆進行數學運算:計算兩個事件之間的時間間隔只需將一個時間戳減去另一個時間戳。如果您想知道兩個日誌記錄之間經過了多少秒,
timestamp2 - timestamp1能立即提供精確答案,無需複雜的日期解析邏輯。 - 資料庫排序:對資料庫引擎而言,按整數欄位按時間順序對記錄進行排序,遠比解析和排序基於文字的時間戳字串要快得多。
閏秒的影響
Unix 時間的一個技術細節是它如何處理閏秒。閏秒是偶爾應用於協調世界時(UTC)的一秒調整,以使一天中的時間接近平太陽時。有趣的是,Unix 時間 不 計算閏秒。在 Unix 時間系統中,每一天都被視為正好 86,400 秒長。當發生閏秒時,Unix 時鐘本質上會重複同一秒兩次。這種意圖明確的設計選擇防止了時間戳變得不可預測,儘管這意味著 Unix 時間並非自 1970 年以來物理時間流逝的嚴格線性測量。對於絕大多數軟體工程應用來說,這種微小的差異是完全可以接受的,並且比追蹤歷史上每個閏秒的複雜性更受青睞。

