> 時間戳 | 紀元時間 | 轉換 <
// 即時將Unix時間戳轉換為日期,或將日期轉換為時間戳
即時時鐘
即時更新的Unix時間戳顯示。即時查看當前的epoch時間。
雙向轉換
將時間戳轉換為可讀日期,或將日期轉換為時間戳。支援兩個方向。
多種格式
以ISO 8601、RFC 2822、UTC、本地時間和相對時間格式查看結果。
// 關於UNIX時間戳
Unix時間戳工作原理:
Unix時間戳(也稱為epoch時間或POSIX時間)表示自1970年1月1日 00:00:00 UTC(Unix紀元)以來經過的秒數。這個簡單的整數值提供了一種通用的、不依賴時區的時間表示方式。
範例:
1711324800 → 2024-03-25T00:00:00.000Z
常見用例:
- >資料庫時間戳儲存和查詢
- >API回應時間欄位
- >日誌檔案時間戳分析
- >除錯時間相關問題
- >跨時區時間協調
- >Y2K38問題:32位元有號整數將在2038年1月19日溢出
>> 常見問題
問:什麼是Unix時間戳?
答:Unix時間戳是自1970年1月1日 00:00:00 UTC以來經過的秒數。它是計算機科學中普遍使用的簡單整數值。
問:什麼是epoch時間?
答:Epoch時間是Unix時間戳的另一個名稱。「紀元」指的是參考點:1970年1月1日 00:00:00 UTC。
問:什麼是Y2038問題?
答:2038年問題(Y2K38)是因為許多系統將Unix時間戳儲存為32位元有號整數,只能表示到2038年1月19日 03:14:07 UTC的時間。
問:秒和毫秒時間戳有什麼區別?
答:秒級Unix時間戳為10位數(如:1711324800),毫秒級為13位數(如:1711324800000)。
問:Unix時間戳可以是負數嗎?
答:可以,負的Unix時間戳表示1970年1月1日之前的日期。例如,-86400表示1969年12月31日。
// 時間戳位數速查表
數一數位數就能判斷單位。把秒和毫秒搞混,是日期顯示錯誤最常見的原因。
| 位數 | 單位 | 範例 | 常見來源 |
|---|---|---|---|
| 10 | s | 1711324800 | Unix/Linux, PHP time(), Stripe |
| 13 | ms | 1711324800000 | JavaScript Date.now(), Java |
| 16 | µs | 1711324800000000 | Kafka, Cassandra |
| 19 | ns | 1711324800000000000 | Go UnixNano(), InfluxDB |
// 在程式碼中取得目前時間戳
JavaScript Math.floor(Date.now() / 1000) Python int(time.time()) PHP time() Go time.Now().Unix() Java Instant.now().getEpochSecond() Ruby Time.now.to_i Bash date +%s
>> 更多問題
問:Unix 時間戳是 UTC 還是本地時間?
答:一律是 UTC。這個整數代表一個絕對時刻,本身不帶時區;只有在顯示為日期時才會套用時區。建議儲存 UTC,顯示時再轉換為本地時間。
問:為什麼我的時間戳顯示的日期不對?
答:通常是秒和毫秒混淆:13 位數當作秒會得到約 55000 年,10 位數當作毫秒則會得到 1970 年 1 月。另外請檢查時區轉換,以及該值是否其實是 Windows FILETIME 或 Excel 日期序號。
問:閏秒會影響 Unix 時間戳嗎?
答:不會。Unix 時間每天固定以 86,400 秒計算,忽略閏秒,閏秒會被重複或平滑分攤(leap smear)。對絕大多數應用已經足夠;科學計時請使用 TAI。
問:除了 Unix 還有其他紀元嗎?
答:有。NTP 使用 1900-01-01,Windows FILETIME 使用 1601-01-01(以 100 奈秒為單位),Excel 從 1899-12-30 起以天計數,Mac HFS+ 使用 1904-01-01。如果某個值與目前的 Unix 數值相差很大,很可能就是這些變體之一。