Unix 時間戳完全指南
什麼是 Unix 時間戳?
Unix 時間戳(Unix Timestamp),也稱為 Epoch Time,是從 1970 年 1 月 1 日 00:00:00 UTC 開始計算的秒數。這個起始時間點被稱為 Unix Epoch。
2024-01-15 12:00:00 UTC = 1705320000
2024-01-15 12:00:00 UTC = 1705320000
為什麼使用 Unix 時間戳?
1. 時區無關
Unix 時間戳是基於 UTC 的,不受時區影響。在全球化的應用中,這避免了時區轉換的複雜性。
2. 易於計算
時間差計算只需要簡單的減法:
javascript
const duration = endTimestamp - startTimestamp; // 秒數
const duration = endTimestamp - startTimestamp; // 秒數
3. 儲存效率
一個 32 位整數就能表示時間,比日期字串更節省空間。
4. 排序簡單
數字比較比日期字串比較更快、更可靠。
各語言中的使用
JavaScript
javascript
// 取得當前時間戳(秒)
Math.floor(Date.now() / 1000);
// 時間戳轉日期
new Date(1705320000 * 1000);
// 日期轉時間戳
Math.floor(new Date("2024-01-15").getTime() / 1000);
// 取得當前時間戳(秒)
Math.floor(Date.now() / 1000);
// 時間戳轉日期
new Date(1705320000 * 1000);
// 日期轉時間戳
Math.floor(new Date("2024-01-15").getTime() / 1000);
Python
python
import time
from datetime import datetime
# 取得當前時間戳
time.time()
# 時間戳轉日期
datetime.fromtimestamp(1705320000)
# 日期轉時間戳
datetime(2024, 1, 15).timestamp()
import time
from datetime import datetime
# 取得當前時間戳
time.time()
# 時間戳轉日期
datetime.fromtimestamp(1705320000)
# 日期轉時間戳
datetime(2024, 1, 15).timestamp()
秒 vs 毫秒
不同系統使用不同的精度:
| 系統/語言 | 精度 | 範例 |
|---|---|---|
| Unix/Linux | 秒 | 1705320000 |
| JavaScript | 毫秒 | 1705320000000 |
| Java | 毫秒 | 1705320000000 |
| Python | 秒(浮點數) | 1705320000.0 |
注意:在 API 設計中,務必明確文件說明使用的是秒還是毫秒。
2038 年問題
32 位元有符號整數能表示的最大值是 2,147,483,647,對應的時間是:
2038 年 1 月 19 日 03:14:07 UTC
2038 年 1 月 19 日 03:14:07 UTC
超過這個時間,32 位元系統會發生溢位。解決方案是使用 64 位元整數,這可以表示到約 2920 億年後。
常見時間戳
| 時間戳 | 日期 | 說明 |
|---|---|---|
| 0 | 1970-01-01 | Unix Epoch |
| 946684800 | 2000-01-01 | 千禧年 |
| 1000000000 | 2001-09-09 | 十億秒 |
| 2000000000 | 2033-05-18 | 二十億秒 |
| 2147483647 | 2038-01-19 | 32 位元上限 |
最佳實踐
- 永遠使用 UTC:儲存和傳輸時使用 UTC,僅在顯示時轉換為本地時間
- 明確精度:在 API 文件中說明時間戳是秒還是毫秒
- 使用 64 位元:新系統應使用 64 位元整數儲存時間戳
- 考慮時區:在前端顯示時,使用
Intl.DateTimeFormat處理時區
實用工具推薦
使用我們的 時間戳轉換器 [blocked] 可以快速在 Unix 時間戳和人類可讀日期之間轉換,支援秒和毫秒精度。



