如何把紀元時間轉換為可讀日期
在主流程式語言中把 Unix 時間戳轉換為可讀日期的實用指南,附線上工具和考慮時區的範例。
什麼是 epoch 時間?
epoch 時間(也稱 Unix 時間或 POSIX 時間)是自 1970 年 1 月 1 日 00:00:00 UTC 起經過的秒數。它是運算中表示時刻的通用標準。幾乎所有語言與作業系統都原生支援,使其成為在系統間儲存與交換時間戳最可靠的格式。
第 1 步 — 辨識你的時間戳格式
轉換之前,先確定你的時間戳是秒還是毫秒:
- 10 位(如 1700000000)→ 自 Unix 紀元起的秒
- 13 位(如 1700000000000)→ 自 Unix 紀元起的毫秒
- 拿不準時,除以 1000 看看年份是否合理
- 你也可以把時間戳貼到上方的轉換器,它會自動辨識
在 JavaScript 中將 epoch 轉為日期
JavaScript 的 Date 建構函式接受毫秒。如果你的時間戳是秒,請先乘以 1000。
- new Date(1700000000 * 1000).toISOString() → '2023-11-15T06:13:20.000Z'
- new Date(1700000000 * 1000).toUTCString() → 'Wed, 15 Nov 2023 06:13:20 GMT'
- new Date(1700000000 * 1000).toLocaleString('en-US', { timeZone: 'America/New_York' })
- new Date(1700000000000).getTime() → 1700000000000 (milliseconds back)
在 Python 中將 epoch 轉為日期
Python 的 datetime 模組提供用於本地時間的 fromtimestamp() 與用於 UTC 的 utcfromtimestamp()。如需顯式處理時區,使用 timezone.utc 參數。
- datetime.datetime.fromtimestamp(1700000000) → local timezone
- datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc) → UTC (Python 3.2+)
- datetime.datetime.fromtimestamp(1700000000).strftime('%Y-%m-%d %H:%M:%S') → formatted string
- datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc).isoformat() → ISO 8601
在 PHP 中將 epoch 轉為日期
PHP 的 date() 函式與 DateTime 類別都直接支援 Unix 時間戳。
- date('Y-m-d H:i:s', 1700000000) → '2023-11-15 06:13:20' (server's local timezone)
- gmdate('Y-m-d H:i:s', 1700000000) → '2023-11-15 06:13:20' (always UTC)
- $dt = new DateTime(); $dt->setTimestamp(1700000000); $dt->format('c') → ISO 8601
在 Go 中將 epoch 轉為日期
Go 的 time 套件用 time.Unix(seconds, nanoseconds) 轉換 Unix 時間戳。
- time.Unix(1700000000, 0) → time.Time in local timezone
- time.Unix(1700000000, 0).UTC() → force UTC
- time.Unix(1700000000, 0).Format(time.RFC3339) → '2023-11-15T06:13:20Z'
- time.Unix(1700000000, 0).Format('2006-01-02 15:04:05') → custom layout
轉換 epoch 時間時的常見錯誤
使用 Unix 時間戳時最常見的錯誤:
- 在 JavaScript 中忘記把秒乘以 1000 —— new Date(1700000000) 得到的是 1970 年而非 2023 年
- 在伺服器端語言中把 JavaScript 的毫秒直接當作秒使用
- 不指定時區而依賴伺服器本地時區,後者因環境而異
- 把時間戳存為字串而非整數,從而破壞數值比較與運算
epoch 轉日期常見問題
- 如何將 epoch 時間轉換為日期?
- 先辨識值是秒(10 位)還是毫秒(13 位),再用你所用語言的日期 API 轉換 —— JavaScript 用 new Date(seconds * 1000),Python 用 datetime.fromtimestamp(seconds, tz=timezone.utc),或貼到上方的轉換器。
- 為什麼我的 epoch 時間戳轉換成了 1970 年?
- 你把一個秒值傳給了期望毫秒的函式,通常是 JavaScript 的 new Date()。請先把 10 位的秒值乘以 1000。
- 應該把 epoch 時間轉換為 UTC 還是本地時間?
- 日誌、API 與跨伺服器比較使用 UTC,僅在顯示時轉換為使用者的本地時區。epoch 值本身與時區無關。