Unix 時間戳是什麼?開發者必備的時間戳轉換教學
什麼是 Unix 時間戳?
Unix 時間戳(Unix Timestamp),也稱為 Epoch Time 或 POSIX Time,是一種用單一數字表示時間的方式。它定義為從 1970 年 1 月 1 日 00:00:00 UTC(稱為 Unix 紀元,Unix Epoch)到某個時間點所經過的秒數。
例如:
0= 1970-01-01 00:00:00 UTC1000000000= 2001-09-09 01:46:40 UTC1700000000= 2023-11-14 22:13:20 UTC
這種表示方式的優點是簡單、統一、不受時區影響,因此被廣泛應用於程式開發、資料庫設計和 API 通訊中。
為什麼開發者需要了解時間戳?
時間戳的優勢
| 優勢 | 說明 |
|---|---|
| 時區無關 | 時間戳是基於 UTC 的絕對值,不受時區影響 |
| 易於比較 | 兩個時間戳可以直接用數字比較大小 |
| 易於計算 | 時間差就是兩個數字的差值(秒數) |
| 儲存高效 | 只需一個整數即可表示精確的時間點 |
| 跨平台 | 所有程式語言和作業系統都支援 |
常見應用場景
- API 通訊:許多 API 使用時間戳傳遞時間資訊
- 資料庫:儲存事件發生的精確時間
- 快取控制:判斷快取是否過期
- 日誌記錄:記錄事件的精確時間
- 排序:按時間順序排列數據
秒級 vs 毫秒級時間戳
需要特別注意的是,不同系統使用不同精度的時間戳:
| 類型 | 位數 | 範例 | 常見於 |
|---|---|---|---|
| 秒級(s) | 10 位 | 1700000000 | Unix/Linux、PHP、Python |
| 毫秒級(ms) | 13 位 | 1700000000000 | JavaScript、Java、API |
| 微秒級(μs) | 16 位 | 1700000000000000 | 高精度系統 |
我們的時間戳轉換器 [blocked]會自動偵測您輸入的時間戳精度,無需手動選擇。
各程式語言中的時間戳操作
JavaScript
// 取得當前時間戳(毫秒)
Date.now() // 1700000000000
new Date().getTime() // 1700000000000
// 取得當前時間戳(秒)
Math.floor(Date.now() / 1000) // 1700000000
// 時間戳轉日期
new Date(1700000000000) // Tue Nov 14 2023 ...
new Date(1700000000 * 1000) // 秒級需乘以 1000
// 日期轉時間戳
new Date("2023-11-14").getTime() // 毫秒級
// 取得當前時間戳(毫秒)
Date.now() // 1700000000000
new Date().getTime() // 1700000000000
// 取得當前時間戳(秒)
Math.floor(Date.now() / 1000) // 1700000000
// 時間戳轉日期
new Date(1700000000000) // Tue Nov 14 2023 ...
new Date(1700000000 * 1000) // 秒級需乘以 1000
// 日期轉時間戳
new Date("2023-11-14").getTime() // 毫秒級
Python
import time
from datetime import datetime
# 取得當前時間戳(秒,浮點數)
time.time() # 1700000000.123
# 時間戳轉日期
datetime.fromtimestamp(1700000000) # 本地時間
datetime.utcfromtimestamp(1700000000) # UTC 時間
# 日期轉時間戳
datetime(2023, 11, 14).timestamp()
import time
from datetime import datetime
# 取得當前時間戳(秒,浮點數)
time.time() # 1700000000.123
# 時間戳轉日期
datetime.fromtimestamp(1700000000) # 本地時間
datetime.utcfromtimestamp(1700000000) # UTC 時間
# 日期轉時間戳
datetime(2023, 11, 14).timestamp()
PHP
// 取得當前時間戳
time(); // 1700000000
// 時間戳轉日期
date("Y-m-d H:i:s", 1700000000);
// 日期轉時間戳
strtotime("2023-11-14");
// 取得當前時間戳
time(); // 1700000000
// 時間戳轉日期
date("Y-m-d H:i:s", 1700000000);
// 日期轉時間戳
strtotime("2023-11-14");
時區與時間戳
時間戳本身是基於 UTC 的,不包含時區資訊。當您將時間戳轉換為人類可讀的日期時間時,需要指定時區。
常見時區對照
| 時區 | UTC 偏移 | 主要城市 |
|---|---|---|
| UTC | +0:00 | 倫敦(冬季) |
| CST | +8:00 | 台北、北京、香港 |
| JST | +9:00 | 東京 |
| EST | -5:00 | 紐約 |
| PST | -8:00 | 舊金山 |
| CET | +1:00 | 巴黎、柏林 |
使用我們的時間戳轉換器 [blocked],您可以同時查看多個時區的對應時間。登入會員後可以添加無限數量的時區,並使用批量轉換功能。
2038 年問題(Y2K38)
什麼是 2038 年問題?
許多舊系統使用 32 位元有符號整數儲存 Unix 時間戳。32 位元有符號整數的最大值是 2,147,483,647,對應的時間是 2038 年 1 月 19 日 03:14:07 UTC。超過這個時間後,32 位元時間戳將溢位,可能導致系統錯誤。
解決方案
現代系統已經普遍採用 64 位元整數儲存時間戳,可以表示到約 2920 億年後的時間,因此不再受此限制。但一些嵌入式系統和舊軟體仍可能受到影響。
常見問題(FAQ)
時間戳為什麼從 1970 年開始?
1970 年 1 月 1 日被選為 Unix 紀元,是因為 Unix 作業系統在 1970 年代初期開發,選擇了一個接近當時的時間點作為起始點。
時間戳可以是負數嗎?
可以。負數的時間戳表示 1970 年 1 月 1 日之前的時間。例如,-86400 表示 1969 年 12 月 31 日。
如何快速判斷時間戳是秒級還是毫秒級?
看位數:10 位數是秒級,13 位數是毫秒級。我們的時間戳轉換器 [blocked]會自動偵測。
時間戳和 ISO 8601 日期格式有什麼區別?
時間戳是一個數字,ISO 8601 是一個字串格式(如 2023-11-14T22:13:20Z)。時間戳更適合程式處理,ISO 8601 更適合人類閱讀和 API 通訊。
相關工具推薦
- 時間戳轉換器 [blocked]:Unix 時間戳與日期時間互轉
- URL 編碼/解碼器 [blocked]:處理 API 請求中的特殊字元
- JSON 格式化工具 [blocked]:格式化包含時間戳的 JSON 數據
- Hash 計算器 [blocked]:計算數據的 Hash 值
立即使用我們的免費時間戳轉換器 [blocked],快速完成時間戳和日期的互相轉換!



