RevealTheme logo

Unix時間戳記轉換工具

在Unix時間戳記與可讀日期之間互相轉換。即時更新。

什麼是Unix時間戳記,為什麼API都用它?

Unix時間戳記(也稱為epoch時間或POSIX時間)是一個單一的整數,表示自1970年1月1日00:00:00 UTC以來經過的秒數,這一時刻被稱為「Unix紀元」。這一慣例可追溯到20世紀70年代貝爾實驗室的首個Unix作業系統。相比可讀日期,它的優勢在於:它是單個數字,與時區無關,便於比較和進行算術運算,並且在不同系統之間含義明確。每一個資料庫、記錄檔、JWT、OAuth權杖以及大多數現代API在內部都使用Unix時間戳記。JWT的「exp」聲明就是一個Unix時間戳記;大多數API的「created_at」要麼是Unix時間戳記,要麼是由它衍生出的ISO 8601字串;Linux/macOS上的檔案修改時間也以Unix時間戳記形式儲存。有兩種常見的變體需要區分:秒(最初的Unix慣例,用於JWT、OAuth和Linux檔案中繼資料)和毫秒(用於JavaScript的Date.now()、Java的System.currentTimeMillis()以及許多現代API)。10位數的時間戳記以秒為單位;13位數的時間戳記以毫秒為單位。本工具兩者都能處理:將任意格式貼到任意欄位,我們會自動偵測並轉換。另一個值得了解的概念是:ISO 8601是標準的可讀格式(2025-12-31T23:59:59Z),嚴格按字母順序排序,且在任何地方都可解析。當你可以在以Unix整數或ISO 8601字串儲存時間戳記之間進行選擇時,出於效能考量選擇Unix,出於可讀性考量選擇ISO 8601。

常見使用場景

  • 解碼JWT負載中的「exp」或「iat」聲明,查看它何時過期。

  • 將API回應的時間戳記轉換為你的本地時區以便除錯。

  • 產生用於設定Cookie過期回應標頭的時間戳記。

  • 將資料庫時間戳記(epoch秒)轉換為ISO 8601以便剖析日誌。

  • 透過相減兩個事件的Unix時間戳記來計算兩者之間的耗時。

  • 使用at命令搭配明確的Unix時間戳記來排程cron工作。

常見問題

為什麼是1970年?
這是貝爾實驗室早期Unix系統的慣例。這一選擇雖然是任意的,但沿用了下來。最初儲存它的32位元有號整數會在2038年1月19日2:14:07 UTC時溢位:這就是「2038年問題」。現代系統使用64位元整數,將溢位推遲到了公元292277026596年。
是秒還是毫秒?
Unix時間戳記以秒為單位(2025年時為10位數)。JavaScript的Date.now()和Java的System.currentTimeMillis()使用毫秒(13位數)。請務必核對你所呼叫的API期望的是哪一種:缺少或多出一個1000的係數,是生產環境中頭號的時間戳記錯誤。
如何按我所在的時區檢視這個時間戳記?
Unix時間戳記與時區無關:它們在任何地方都表示同一個時刻。將該時間戳記傳給你所用語言的日期格式化器並指定恰當的時區,即可按你的本地時區顯示它。在JavaScript中:new Date(ts*1000).toLocaleString('zh-TW', { timeZone: 'America/New_York' })。
Unix時間和UTC有什麼區別?
Unix時間是單個數字;UTC則是一種包含年、月、日、時、分、秒的表示形式。按照慣例,Unix時間戳記始終採用UTC:不存在「EST時區下的Unix時間」。顯示時可以採用任意時區,但其底層數字是通用的。
閏秒是如何處理的?
Unix時間忽略閏秒:它假定每天恰好有86400秒。這意味著在插入閏秒期間,Unix時間可能會短暫回退或凍結。對大多數應用而言,這是不可見的;對於高精度系統(GPS、金融交易),請使用TAI(國際原子時)。
Unix時間戳記可以是負數嗎?
可以:它們表示1970年之前的日期。負時間戳記在大多數語言中都能正常運作,儘管某些舊系統會拒絕它們。
什麼是ISO 8601時間戳記?
ISO 8601是可讀日期/時間格式的國際標準:YYYY-MM-DDTHH:MM:SSZ(Z=UTC,或用+HH:MM表示其他偏移)。例如:2025-12-31T23:59:59Z。ISO 8601字串按字母順序排序時即為時間先後順序,因而非常適合記錄檔和資料庫查詢。

相關工具