什麼是 Unix 時間戳記?
Unix 時間戳記(又稱紀元時間 epoch time 或 POSIX 時間)指的是自 1970 年 1 月 1 日 00:00:00 UTC 起算、所經過的秒數,且不計閏秒。它是電腦用來記錄某個時間點的通用方式,與時區、日曆格式完全無關。本工具會接收以毫秒為單位的時間戳記(這也是多數程式語言回傳的單位,例如 JavaScript 的 Date.now()),並將其換算為自紀元以來的秒數、分鐘與天數。
使用方式
在欄位中輸入你的毫秒級 Unix 時間,然後送出。工具會以 floor 方式除以 1000,得到整數的 Unix 秒數——這是資料庫、API 以及 Linux 指令 date +%s 最常用的格式。結果表格同時會顯示原始的毫秒數值,以及經過的分鐘與天數,方便你快速核對。
公式解說
核心換算公式為 $$\text{Seconds} = \left\lfloor \frac{\text{Time (ms)}}{1000} \right\rfloor$$ 除以 1000 是把毫秒轉成秒,再用 floor 去掉小數部分,就能得到以整秒為單位的時間戳記。分鐘的算法是 \(\left\lfloor \frac{M}{60000} \right\rfloor\),天數則是 \(\left\lfloor \frac{M}{86400000} \right\rfloor\),因為一天有 86,400 秒,也就是 86,400,000 毫秒。
$$\begin{gathered} \text{Seconds} = \left\lfloor \dfrac{M}{1000} \right\rfloor, \quad \text{Millis} = M \\[1em] \text{Minutes} = \left\lfloor \dfrac{M}{60000} \right\rfloor, \quad \text{Days} = \left\lfloor \dfrac{M}{86400000} \right\rfloor \\[1.5em] \text{where}\quad M = \text{Time (ms)} \end{gathered}$$
實際範例
假設 \(M = 1{,}700{,}000{,}000{,}000\)。則 $$\text{Seconds} = \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000 \text{ 秒}$$ 對應的日期為 2023 年 11 月 14 日。自紀元以來的分鐘數 \(= \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{60000} \right\rfloor = 28{,}333{,}333\);天數 \(= \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{86{,}400{,}000} \right\rfloor = 19{,}675\)。
常見問題
為什麼有些地方用秒、有些地方又用毫秒?較舊的系統與許多 API(Unix、Postgres、JWT 的 exp 欄位)以秒為單位儲存,而瀏覽器和 Java 則使用毫秒。兩者之間的換算只要乘上或除以 1000 即可。
那閏秒怎麼處理?Unix 時間不計入閏秒,因此整個計數是一條乾淨的線性量度——做算術運算很方便,但並不會與天文上的 UTC 完全對齊。
2038 年會不會出問題?若系統以帶正負號的 32 位元整數儲存秒數,會在 2038 年 1 月 19 日發生溢位。現代的 64 位元系統則不受影響。