首頁/部落格/Unix 時間戳完全指南:Epoch 時間的原理與轉換技巧
教學

Unix 時間戳完全指南:Epoch 時間的原理與轉換技巧

深入了解 Unix 時間戳(Epoch Time)的原理、為什麼使用它、常見的轉換方法和 2038 年問題。適合所有開發者閱讀。

奧特線上工具2026/2/137 分鐘閱讀2 次瀏覽
Unix 時間戳完全指南:Epoch 時間的原理與轉換技巧

Unix 時間戳完全指南

什麼是 Unix 時間戳?

Unix 時間戳(Unix Timestamp),也稱為 Epoch Time,是從 1970 年 1 月 1 日 00:00:00 UTC 開始計算的秒數。這個起始時間點被稱為 Unix Epoch

2024-01-15 12:00:00 UTC = 1705320000

為什麼使用 Unix 時間戳?

1. 時區無關

Unix 時間戳是基於 UTC 的,不受時區影響。在全球化的應用中,這避免了時區轉換的複雜性。

2. 易於計算

時間差計算只需要簡單的減法:

javascript
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);

Python

python
import time
from datetime import datetime

# 取得當前時間戳
time.time()

# 時間戳轉日期
datetime.fromtimestamp(1705320000)

# 日期轉時間戳
datetime(2024, 1, 15).timestamp()

秒 vs 毫秒

不同系統使用不同的精度:

系統/語言精度範例
Unix/Linux1705320000
JavaScript毫秒1705320000000
Java毫秒1705320000000
Python秒(浮點數)1705320000.0

注意:在 API 設計中,務必明確文件說明使用的是秒還是毫秒。

2038 年問題

32 位元有符號整數能表示的最大值是 2,147,483,647,對應的時間是:

2038 年 1 月 19 日 03:14:07 UTC

超過這個時間,32 位元系統會發生溢位。解決方案是使用 64 位元整數,這可以表示到約 2920 億年後。

常見時間戳

時間戳日期說明
01970-01-01Unix Epoch
9466848002000-01-01千禧年
10000000002001-09-09十億秒
20000000002033-05-18二十億秒
21474836472038-01-1932 位元上限

最佳實踐

  1. 永遠使用 UTC:儲存和傳輸時使用 UTC,僅在顯示時轉換為本地時間
  2. 明確精度:在 API 文件中說明時間戳是秒還是毫秒
  3. 使用 64 位元:新系統應使用 64 位元整數儲存時間戳
  4. 考慮時區:在前端顯示時,使用 Intl.DateTimeFormat 處理時區

實用工具推薦

使用我們的 時間戳轉換器 [blocked] 可以快速在 Unix 時間戳和人類可讀日期之間轉換,支援秒和毫秒精度。

立即試用相關工具

馬上體驗文章中提到的功能