把 Unix 時間戳記轉換成日期,再把日期轉換回時間戳記
發布於 · 更新於 閱讀約 2 分鐘
Unix 時間戳記統計的是自世界協調時間 1970 年 1 月 1 日午夜以來經過的時間。兩個問題決定最終的日期:數字的單位,以及您讀取結果所用的時區。
一個參考值
轉換 Unix 時間戳記 會給出同一時刻的三種讀法。以 1700000000 為例,瀏覽器設為巴黎時間:
| 讀法 | 結果 |
|---|---|
| UTC 日期 | Tue, 14 Nov 2023 22:13:20 GMT |
| 本地日期 | 2023 年 11 月 14 日 23:13:20 UTC+1 |
| ISO | 2023-11-14T22:13:20.000Z |
本地時間跟隨瀏覽器的時區:巴黎冬季多一小時。同一個時間戳記只是一個時刻,在兩個時區中讀取而已。
單位根據位數識別
預設設定會根據數字的長度識別單位。下面三個值表示同一個時刻,精度不同。
| 數字 | 位數 | 識別出的單位 | 得到的時刻 |
|---|---|---|---|
| 1700000000 | 10 | 秒 | 2023 年 11 月 14 日 22:13:20 UTC |
| 1700000000000 | 13 | 毫秒 | 2023 年 11 月 14 日 22:13:20 UTC |
| 1700000000123456 | 16 | 微秒 | 2023 年 11 月 14 日 22:13:20.123 UTC |
規則:最多 11 位為秒,12 到 14 位為毫秒,15 和 16 位為微秒。“毫秒”設定會強制使用該單位。
規則的陷阱
由於單位是根據長度推斷的,含糊的值只會按一種方式讀取:10000000000(11 位)得到 2286 年 11 月 20 日,100000000000(12 位)得到 1973 年 3 月 3 日。早於 1973 年 3 月的毫秒時間戳記只有 11 位或更少,會被當作秒來讀取:此時請強制使用“毫秒”設定。
1970 年之前的值與 2038 年的上限
負數表示 1970 年之前的時刻:-1 得到 1969 年 12 月 31 日 23:59:59 UTC,0 得到 1970 年 1 月 1 日午夜。
數字 2147483647 是有符號 32 位整數能容納的最大值:它得到 2038 年 1 月 19 日 03:14:07 UTC。下一個數 2147483648 得到 03:14:08:工具可以不受限制地繼續,但用 32 位儲存時間的系統做不到。
把日期轉換成時間戳記
輸入日期而不是數字:工具會給出以秒和毫秒表示的時間戳記。
| 輸入 | 以秒為單位的時間戳記 | 讀法 |
|---|---|---|
| 2026-01-01 | 1767225600 | 世界協調時間的午夜,未給出時區 |
| 2026-01-01T10:30:00+01:00 | 1767259800 | 巴黎時間 10:30,即世界協調時間 09:30 |
| 2024-02-29 | 1709164800 | 接受閏年 |
沒有時區的日期按世界協調時間讀取,而不是本地時間:工具會在結果中說明。不存在的日期,比如 2026 年 2 月 30 日,會被拒絕並給出提示。
常見錯誤
- 把毫秒當作秒來讀:日期會落到幾千年以外。
- 忘記時區:按本地時間讀取的日期,再按世界協調時間傳送,會偏差一小時或更多。
- 寫日期時不帶時區,心裡卻想著本地時間,而它會按 UTC 被讀取。
想計算兩個日期之間相隔的天數,請參閱 計算兩個日期之間相隔的天數。
檢查轉換
- 重新讀一遍 UTC 那一行,它不依賴於裝置。
- 檢查結果第一行宣告的單位。
- 把得到的日期再轉換回去:應該得到起始的數字。
