Ad
DevToolXDevToolX

時間戳轉換

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 寫臨時腳本。

常見使用情境

解讀 server log 裡的時間戳
log 印出 1713024000 時,貼到這裡就能立刻看到 2024-04-13T16:00:00Z,方便與其他系統的事件做時間對照。
解碼 JWT 的 `exp` 與 `iat` 欄位
JWT payload 裡的過期時間是純整數。把 `exp` 值貼過來,確認 token 是否已失效,比臨時寫 `new Date(exp * 1000)` 更快。
產生 HTTP 快取 header 所需的日期字串
`If-Modified-Since`、`Expires` 等 header 使用 RFC 7231 日期格式。把 UTC 時間點轉換後,再填入測試 fixture 或 mock server 設定。
跨時區驗證 API 回應的時間值
後端存 UTC,前端顯示本地時間。把 API 回傳的原始時間戳貼過來,先確認 UTC 值正確,再去查前端的時區轉換邏輯。

常見問題

怎麼判斷手上的時間戳是秒還是毫秒?

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 廣泛落地後再遷移。

相關工具