電腦裡有一個從 1970 年開始的倒數計時器
如果你曾經在資料庫或 API 回應中看到像 1741737600 這樣一串數字,那就是 Unix 時間戳(Unix Timestamp)——電腦用來記錄時間最底層、最通用的方式。
它代表的是「從 1970 年 1 月 1 日 00:00:00 UTC 到現在,總共過了幾秒」。截至 2026 年初,這個數字已經超過 17 億。
這篇文章帶你了解 Unix 時間戳的由來、格式、換算方式,以及在工程實務中你會在哪裡遇到它。
🕰️ 為什麼是 1970 年 1 月 1 日?
這個起點稱為 Unix 紀元(Unix Epoch),由 Unix 作業系統的設計者確立。
Unix 作業系統在 1969 到 1971 年之間由 Ken Thompson 和 Dennis Ritchie 在貝爾實驗室開發。在設計時間表示方式時,工程師需要一個固定的「零點」來計算相對時間。
選擇 1970 年 1 月 1 日並沒有特別深刻的歷史意義,純粹是因為:
- 開發進行時的當下:Unix 開發的年代大約就在 1970 年,選這個年份作為起點非常自然。
- 整數計算方便:整數秒數便於數學運算,也便於早期電腦用 32 位元整數儲存。
- 時區中立的 UTC:選擇協調世界時(UTC)作為基準,避免了時區帶來的複雜度。
後來 Unix 的影響力擴散到整個軟體工業,這個紀元也就成了業界標準。從 C 語言、Python、JavaScript 到各種資料庫,幾乎所有系統的底層時間計算都以此為基準。
🔢 Unix 時間戳的格式
Unix 時間戳最常見的精度有三種:
| 精度 | 單位 | 範例 | 使用場景 |
|---|---|---|---|
| 秒級 | 秒 | 1741737600 | 大多數後端 API、資料庫 |
| 毫秒級 | 毫秒 | 1741737600000 | JavaScript、前端事件、日誌系統 |
| 微秒/奈秒 | μs/ns | 1741737600000000 | 高精度系統、分散式追蹤 |
注意:收到一串時間數字時,先看位數長度:10 位約是秒級,13 位約是毫秒級,超過則是微秒或奈秒。這是工程師最常用的快速判斷技巧。
📅 怎麼換算成人類看得懂的時間?
手動換算邏輯
Unix 時間戳換算成一般日期時間,需要考慮:
- 將秒數轉換成年、月、日、時、分、秒
- 加入時區偏移(UTC 轉換為當地時間)
台灣位於 UTC+8,所以 Unix 時間戳轉台灣時間需要加上 8 × 3600 = 28,800 秒。
常見語言的換算方式
JavaScript(毫秒):
const ts = 1741737600;
const date = new Date(ts * 1000);
console.log(date.toLocaleString('zh-TW', { timeZone: 'Asia/Taipei' }));
// 輸出: 2025/3/12 上午 12:00:00
Python:
import datetime, pytz
ts = 1741737600
dt = datetime.datetime.fromtimestamp(ts, tz=pytz.timezone('Asia/Taipei'))
print(dt)
# 2025-03-12 00:00:00+08:00
PHP:
echo date('Y-m-d H:i:s', 1741737600);
// 依伺服器時區輸出,建議搭配 date_default_timezone_set('Asia/Taipei')
🛠️ 工程實務中在哪裡會遇到 Unix 時間戳?
1. 資料庫儲存
許多資料庫(MySQL、PostgreSQL、SQLite)在儲存時間時,底層以 Unix 時間戳記錄,再由應用層轉換成人類可讀格式。使用時間戳的優點:
- 儲存空間小:一個整數比一個字串更省空間。
- 時區無關:統一以 UTC 儲存,各地讀取時再換算,避免夏令時間錯誤。
- 排序高效:整數比較比字串比較快,ORDER BY 時間欄位性能更好。
2. API 回應
REST API 或 JSON 資料經常以 Unix 時間戳傳送時間資訊,例如:
{
"created_at": 1741737600,
"expires_at": 1742342400
}
前端收到後再換算成「3 天前」、「2026/03/12」等使用者友善格式。
3. 日誌系統(Log)
伺服器日誌、行為追蹤系統常使用毫秒級或奈秒級時間戳,方便排序大量事件並計算精確的時間間隔,例如:
[1741737600012] GET /api/user 200 OK — 47ms
[1741737600059] POST /api/order 201 Created — 112ms
4. 權杖與憑證有效期(Token Expiry)
JWT(JSON Web Token)、OAuth 存取憑證等通常以 Unix 時間戳表示到期時間:
{
"exp": 1741824000,
"iat": 1741737600
}
exp(expiration time)和 iat(issued at)都是業界標準的 Unix 時間戳欄位。
⚠️ 2038 年問題:32 位元時間的末日
Unix 時間戳原本設計以 32 位元有號整數儲存,最大值為 2,147,483,647。換算下來,這個數字對應的日期是:
2038 年 1 月 19 日 03:14:07 UTC
超過這個時間點後,32 位元系統的計數器將會「溢位」(Overflow),回到負數,發生類似千禧蟲(Y2K)的時間錯誤。
這個問題稱為 Year 2038 Problem(Y2K38)。
目前的應對方法:
- 遷移到 64 位元整數:64 位元最大可表示到西元 2920 億年,完全不是問題。
- 現代系統(Linux 核心、Python 3、大多數資料庫)已默默完成遷移,但部分嵌入式系統、舊版韌體仍需關注。
常見問題 FAQ
Q1:Unix 時間戳跟台灣時間差幾小時?
台灣使用 UTC+8,因此台灣時間 = Unix 時間戳轉 UTC 後 + 8 小時。
Q2:JavaScript 的 Date.now() 是秒還是毫秒?
毫秒(ms)。Date.now() 回傳的是毫秒級時間戳,如果要換算成秒級,需要除以 1000:Math.floor(Date.now() / 1000)。
Q3:什麼時候要用時間戳,什麼時候用 ISO 8601 字串?
- Unix 時間戳:適合機器運算、排序、比較、儲存效率優先的場景。
- ISO 8601(如
2026-03-12T00:00:00+08:00):適合日誌、文件、人機介面需要可讀性的場景。
兩者各有用途,現代系統通常都支援互轉。
Q4:Unix 時間戳有辦法偽造或竄改嗎?
時間戳本身只是一個整數,沒有加密保護。若需要防止竄改(如 JWT 到期時間),必須搭配簽章(Signature)機制驗證完整性。
總結
Unix 時間戳從 1970 年的 Unix 工程師隨手定的一個起點,變成了全球軟體工業最通用的時間語言。秒數背後藏的不只是時間,更是數十年電腦科學發展的積累。
了解它的格式、換算方法與應用場景,無論是開發 API、處理資料庫、除錯日誌,都能讓你更快讀懂那串數字代表什麼。
👉 遇到一串數字不知道是什麼時間?用本站的 Unix 時間戳換算工具,秒數、毫秒與台灣時間即時互轉!