Unix 時間戳是自 Unix 紀元 1970-01-01T00:00:00Z(UTC)以來經過的秒數,而在 Python 中將其轉換為人類可讀的日期,意味著透過 datetime 或 time 模組,將那個原始整數移入一個 datetime 物件。Python 內建的方法快速、可腳本化且可重現,因此當轉換必須在執行中的管線、API 處理程式,或一次處理數百列資料的資料清理腳本中進行時,它是正確的選擇。其權衡在於你必須搞懂兩個細節:單位(秒或毫秒)以及時區(UTC 或你的本地時鐘)。其中任何一個弄錯,一個完全正確的紀元數字就會突然顯示為 1970 年,或是西元 55000 年的某個日期。對於臨時解碼——盯著一行日誌、一個 API 酬載或一個資料庫欄位,想知道它實際代表什麼時間——一個免費的瀏覽器內 Unix 時間戳轉換器能一次給你四種檢視:ISO 8601、可讀的 UTC 字串、你裝置的本地時間,以及像「3 hours ago」這樣的相對標籤。本指南會先介紹 Python 的做法,再帶你走過瀏覽器工具,讓你能依當下情境選擇最適合的方式。

how to convert unix timestamp to date in python
如何在 Python 中將 Unix 時間戳轉換為日期

Unix 時間戳究竟是什麼

Unix 時間戳——也稱為紀元時間,或簡稱 Unix 時間——是自 1970-01-01T00:00:00Z(Unix 世界時鐘中代表零的瞬間)以來經過的秒數。根據 Wikipedia 上關於 Unix 時間的條目,該參考瞬間定義於 UTC,無論你使用何種語言、作業系統或資料庫引擎,結果都相同。其格式就是一個普通整數,每秒遞增一個單位,沒有附加時區,也沒有內建閏秒修正。

正是這種簡單讓這個值無處不在:伺服器日誌、REST 與 GraphQL API 回應、JWT 過期聲明、cron 排程、Git commit 中繼資料,以及用於 created_at 和 updated_at 的資料庫欄位,全都把時間儲存為從 1970 年格林威治午夜開始遞增的純整數。精簡、明確、排序容易,但若沒有轉換步驟則完全不透明。

Python 的角度:在程式碼中處理紀元值

Python 的標準函式庫透過 time 模組和 datetime 模組,讓雙向轉換都只要一行程式碼,兩者在每次預設安裝中都隨附提供。對於正向轉換——紀元到 datetime——正規做法是 datetime.fromtimestamp(epoch_seconds, tz=timezone.utc)。tz 參數是讓結果保持明確無歧義的關鍵;若沒有它,fromtimestamp 會使用你機器的本地時區,相同的紀元值在柏林的伺服器和舊金山的伺服器上會顯示為不同時間。較舊的 datetime.utcfromtimestamp() 方法在大多數仍在使用的 Python 版本中仍可運作,但自 Python 3.12 起已被棄用,改為使用明確指定時區的形式。

若是毫秒,請先除以 1000 或傳入浮點數:datetime.fromtimestamp(epoch_ms / 1000, tz=timezone.utc)。對於反向轉換——datetime 到紀元——datetime.timestamp() 會回傳一個浮點數,當你想要經典的 Unix 整數形式時可以四捨五入為整數。當你需要「現在」的紀元形式時,請搭配 datetime.now(timezone.utc) 使用;當你要把字串轉回整數以供儲存時,則搭配已解析的 datetime 物件使用。

一個簡單的具體範例:將一個紀元值餵入 datetime.fromtimestamp(..., tz=timezone.utc),會回傳對應的 UTC datetime 物件——這與你把同一個日期字串貼到瀏覽器工具的 Date → Timestamp 欄位時得到的結果相同。兩種方法產生的是同一個時間點;選擇哪一種,取決於轉換發生在腳本裡,還是只在你的螢幕上。

如何使用瀏覽器工具將 Unix 時間戳轉換為日期

對於一次性解碼——像是讀日誌檔、檢查 API 回應、或查驗 JWT exp 聲明時所做的那種——開啟瀏覽器分頁比啟動 Python REPL 更快。Unix 時間戳轉換器在本機執行,能一次給你同一個紀元數字的四種可讀檢視。具體步驟如下:

  1. 在瀏覽器中開啟 Unix 時間戳轉換器。
  2. 將整數值貼到「Timestamp → Date」欄位中。
  3. 從單位選擇器中挑選 Seconds(秒)或 Milliseconds(毫秒)——選擇與你數字長度相符的單位,如果你不確定,也可以讓工具的自動偵測功能執行。
  4. 一起閱讀出現的四種檢視:ISO 8601 字串(與時區無關)、UTC 字串(也是 UTC,但格式化為人類可讀形式)、你裝置的本地時間(反映你的機器時區),以及 Relative 標籤(以簡明詞彙表示距離現在的時間,例如「3 hours ago」或「in 2 days」)。
  5. 若要反向操作,請將日期貼上或輸入到「Date → Timestamp」欄位——可以是像 2023-11-14T22:13:20Z 這樣的 ISO 8601 字串、像「2023-11-14 22:13:20 UTC」這樣的簡明格式,或是自然語言的日期——然後讀取工具同時以秒和毫秒回傳的紀元值。

秒與毫秒:最常見的錯誤

這是比其他任何細節都更容易讓開發人員犯錯的部分。Unix 時間從零開始遞增,每秒一個單位,但 JavaScript 的 Date 物件、Java 的 System.currentTimeMillis(),以及許多 HTTP API 都以毫秒為單位——數值整整大了 1000 倍。把它們搞混,就是真實時間戳與遠古或遙遠未來某個日期之間的差別。

最快的經驗法則是數位數。以秒為單位的當前紀元值大約有 10 位數;同一瞬間以毫秒為單位則大約有 13 位數。如果你的數字大約是 1,700,000,000,你立刻就能讀出它是 2023 或 2024 年的日期。如果你的數字大約是 1,700,000,000,000,你必須先除以 1000。把毫秒餵進秒欄位,你會落在西元 55000 年附近;把秒餵進毫秒欄位,你會落在 1970 年。兩者肉眼看起來都合理,但都與你真正想表達的時間不符。

數字長度 可能的單位 處理方式
~10 位數 秒 在轉換器中使用 Seconds 選項
~13 位數 毫秒 使用 Milliseconds 選項,或在 Python 中除以 1000
9 位數或更少 秒,非常舊的日期 再次確認資料來源與預期範圍
14 位數以上 微秒或奈秒 不是 Unix 時間;請透過原始 API 進行轉換

Unix 時間戳轉換器會依位數自動偵測,並讓你覆寫單位,因此秒與毫秒的抉擇保持明確而非默默處理——正是這種防護機制,能把「神秘時間戳」的工單化為一行的修正。

解讀輸出:ISO 8601、UTC 與本地時間

當工具回傳同一個紀元的四種檢視時,每一種都在回答不同的問題。知道該把哪一種複製到錯誤報告、聊天訊息或資料庫查詢中,是善用紀元值的一部分。

輸出檢視 格式範例 適用情境
ISO 8601 2023-11-14T22:13:20.000Z API 回應、排序鍵、機器對機器通訊、複製貼上到程式碼中
UTC 字串 Tue, 14 Nov 2023 22:13:20 UTC 必須跨時區保持明確無歧義的人類可讀時間戳
本地時間 2023-11-14 17:13:20(視裝置而定) 確認使用者當時的時間、除錯 UI 錯誤、快速核對
相對時間 「3 hours ago」/「in 2 days」 Slack 訊息、commit 歷史、面向使用者的文字

ISO 8601 和 UTC 字串都與時區無關——無論誰讀取,內容都相同。本地時間反映你的裝置,而這正是重點:它是事件被記錄當下原始使用者所看到的檢視。

反向操作:從日期回到時間戳

反向操作同樣常見:你手上有來自設定檔、API 回應或螢幕截圖的日期字串,需要紀元整數來餵給另一個系統。工具透過「Date → Timestamp」欄位處理這件事。貼上像 2023-11-14T22:13:20Z 這樣的 ISO 8601 字串、像「2023-11-14 22:13:20 UTC」這樣的簡明格式,或是自然語言的日期,工具會同時以秒和毫秒回傳紀元值。秒的形式正是 Python 的 datetime.fromtimestamp() 直接期望的輸入。毫秒的形式正是 JavaScript 的 new Date(value) 直接期望的輸入。同時擁有兩者是那種在你串接兩個服務時省下心算的訣竅。

2038 年問題及其重要性

能夠用肉眼判讀原始時間戳的最後一個理由,是著名的 2038 年問題。以帶正負號的 32 位元整數儲存 Unix 時間的系統,會在 2038 年 1 月 19 日 UTC 03:14:07 溢位,並繞回到 1901 年——在這短暫的窗口中,對尚未修補的軟體而言,那看起來會像是一個完全有效的時間戳。現代 64 位元平台不受影響,且每個現代瀏覽器都以 64 位元雙精度浮點數儲存時間,因此 Unix 時間戳轉換器能正確處理遠超過 2038 年的日期。這個 bug 仍潛伏在舊式嵌入式韌體、使用 INT(4) 儲存紀元值的較舊資料庫欄位,以及任何自 2010 年代初就未再更新的系統中。能夠在兩秒內把一個看起來可疑的紀元數字轉換為日期,正是那種能在問題觸及客戶之前就先攔截下來的日常除錯習慣。

延伸閱讀:在 Python 中解析 URL 並與瀏覽器相互驗證。

延伸閱讀:Chmod 計算器說明:解讀 Unix 權限。