epoch 毫秒轉日期:轉換 13 位時間戳和 long 值
把 epoch 毫秒轉換為可讀日期的指南。涵蓋 13 位時間戳、JavaScript Date、Java long 值、毫秒與秒,以及為什麼錯誤的單位會產生 1970 年或很遙遠的日期。
什麼是 epoch 毫秒
epoch 毫秒計數自 1970 年 1 月 1 日 00:00:00 UTC 起的毫秒。它使用與 Unix 秒相同的 Unix 紀元,但精度多三位。現代的 epoch 毫秒值通常為 13 位,如 1700000000000。
如何把 millis 轉為日期
如果值已經是毫秒,JavaScript Date 可以直接讀取。如果接收工具期望秒,請先除以 1000。主要錯誤是在錯誤的邊界上做乘除。
- JavaScript: new Date(1700000000000).toISOString()
- Milliseconds to seconds: Math.floor(1700000000000 / 1000)
- Seconds to milliseconds: 1700000000 * 1000
- Java Instant: Instant.ofEpochMilli(1700000000000L)
- Python: datetime.fromtimestamp(ms / 1000, tz=timezone.utc)
在 Java 與資料庫中把 long 轉為日期
搜尋「long 轉日期」通常來自 Java、Kotlin、Android,或把時間戳存為 64 位整數的資料庫匯出。該值可能是 epoch 毫秒,但也可能是秒、微秒或奈秒。轉換前請檢查位數。
- 10 位:很可能是 Unix 秒
- 13 位:很可能是 Unix 毫秒或 Java long 毫秒
- 16 位:很可能是微秒
- 19 位:很可能是奈秒
- 始終用單位命名欄位,例如 created_at_ms
為什麼毫秒會轉換成奇怪的日期
把毫秒值當作秒會得到極其遙遠的未來日期。把秒值當作毫秒會得到接近 1970 年 1 月的日期。位數是最快的診斷方式。
- 1700000000000 作為毫秒 = 2023-11-14 22:13:20 UTC
- 1700000000000 作為秒 = 約西元 55840 年,視函式庫而定
- 1700000000 作為秒 = 2023-11-14 22:13:20 UTC
- 1700000000 作為毫秒 = 1970-01-20 16:13:20 UTC
epoch 毫秒常見問題
- ms 的 epoch 時間和 Unix 時間戳一樣嗎?
- 使用相同的紀元,但單位是毫秒而非秒。經典的 Unix 時間戳通常指秒。
- epoch 毫秒時間戳有幾位?
- 對目前日期,epoch 毫秒通常為 13 位。
- JavaScript 用毫秒還是秒?
- JavaScript Date 用毫秒。Date.now() 回傳 epoch 毫秒。
- 如何把 Java long 時間戳轉為日期?
- 若 long 是 epoch 毫秒,用 Instant.ofEpochMilli(value);若是 epoch 秒,用 Instant.ofEpochSecond(value)。先檢查位數:13 位通常是毫秒,10 位通常是秒。
More posts
什麼是 UTC 時間?含義、偏移與轉換詳解Unix 時間轉日期:把 Unix 時間戳轉換為可讀時間紀元時間戳詳解:Unix 時間、POSIX 時間與自 1970 年起的秒epoch 轉換器指南:轉換紀元時間、Unix 時間和時間戳日期轉 epoch:把時間轉換為 Unix 時間戳或紀元時間當前 Unix 時間戳:紀元時鐘、UTC 時間與即時 Unix 時間2026 年初的 Unix 時間戳:1767225600 詳解JavaScript Date.now():取得與轉換 Unix 時間戳毫秒 vs 秒:讓每個應用都崩潰的單位混淆在資料庫中儲存時間戳:DATETIME vs INT vs BIGINT無需函式庫的 JavaScript 時區正確日期格式化每個開發者都發布過的 7 個 Unix 時間戳 bug紀元時間詳解:Unix 時間戳零是什麼?