時間戳轉換
Unix 時間戳與日期時間互相轉換
關於 時間戳轉換
Unix 時間戳是一個整數,計算從 1970-01-01T00:00:00Z(UTC)至今經過的秒數。但要小心:JavaScript 的 `Date.now()` 和 Java 的 `System.currentTimeMillis()` 回傳的是毫秒,10 位數代表秒,13 位數代表毫秒——這個差異是「時間差了 1000 倍」bug 最常見的來源。這個工具支援秒與毫秒雙向轉換,輸出 ISO 8601、本地時間等格式,方便你快速解讀 log、JWT、API 回應裡的時間戳,不需要再開 Node.js 或 Python 寫臨時腳本。
常見使用情境
常見問題
怎麼判斷手上的時間戳是秒還是毫秒?
10 位數幾乎肯定是秒(Unix 紀元的秒數在 2001 年突破 10 位);13 位數是毫秒。如果把 13 位的毫秒值直接當秒傳給 API,對方算出的日期會落在西元 2286 年附近。
時間一定要存 UTC 嗎?
是的。資料庫存 UTC、API 傳 Unix 秒數、只在最後呈現層才轉本地時區。直接存本地時間會在日光節約時間(DST)切換時產生無法復原的歧義。
什麼是 2038 年問題?
有號 32 位元整數最大值是 2147483647,對應到 2038-01-19T03:14:07Z。用 `int32` 存時間戳的系統在這個時間點會溢位歸零。現代系統改用 `int64`,理論上可以撐到幾千億年後。
ISO 8601 字串結尾的 Z 是什麼意思?
Z 是 UTC 時區代號(源自 Zulu time)。`2026-04-13T15:30:00Z` 代表 UTC 時間 15:30。如果字串沒有時區後綴,語意就不完整——應該總是加上 Z 或明確的偏移量,例如 +08:00。
JavaScript 的 Date API 可靠嗎?
堪用,但有很多坑:月份索引從 0 開始、各環境的時區支援不一致、非 ISO 格式字串的解析結果是實作定義的行為。TC39 的 Temporal API(目前 stage 3)修正了這些問題。現階段建議在正式程式碼裡用 `date-fns` 或 `Luxon`,等 Temporal 廣泛落地後再遷移。