開發者的 Unix 時間戳轉換器指南
掌握 Unix 時戳轉換器。學習如何將紀元時間轉換為可讀的日期,處理不同語言,並避免常見的開發者陷阱。

一個 Unix 時間戳記轉換器 是開發者或數據分析師那些看似簡單卻不可或缺的工具之一,你會發現自己經常需要用到它。這個便利的工具能將一個冗長、看似隨機的數字轉換為我們能真正理解的日期與時間。當你在挖掘系統日誌、使用 API 或查詢以這種高效格式儲存時間的資料庫時,這種轉換至關重要。
什麼是 Unix 時間戳記,以及它為何重要

在真正領會一個好的轉換器有多好用之前,你必須先理解那個數字實際上 是什麼。本質上,Unix 時間戳記就是一個持續累加的秒數。它追蹤的是從 1970 年 1 月 1 日 00:00:00 UTC(協調世界時)以來所經過的總秒數。那個特定的時刻被稱為 "Unix 時間戳記的起點"。
那麼為什麼要用這種方式呢?因為簡單且高效。儲存時間時,使用單一整數比使用像 "2021 年 1 月 1 日 星期五 上午 12:00:00 GMT" 這樣的冗長字串要緊湊高效得多。這使得它非常適合用於以下幾個關鍵領域:
- 資料庫儲存:時間戳記體積小,索引和查詢速度都很快。這對性能是巨大的提升。
- API 資料負載:來回傳送單一數字,比傳送完整的日期字串更省頻寬,從而實現更快的響應時間。
- 日誌檔案:當你從數十個不同的系統解析日誌時,統一且不依賴語言的時間戳記是個救星。
- 計算:需要知道一個過程花了多久時間?只需用結束的時間戳記減去開始的時間戳記即可。這是簡單的整數運算。
秒、毫秒及其他精度
經典的 Unix 時間戳記是一個 10 位數的數字,代表秒數。但隨著技術演進,對更精細計時的需求增加。這就是你開始看到不同長度時間戳記的地方,也是一個常見的絆腳石。
以下是你在實際應用中常會遇到的幾種格式簡述。將一種誤認為另一種是典型的 "差一千倍" 的錯誤,可能導致一些令人困惑的 bug。
常見 Unix 時間戳記格式一覽
| 單位 | 位數 | 典型用途 | 範例值(同一時刻) |
|---|---|---|---|
| 秒 | 10 | 大多數後端系統、資料庫和 API 的標準格式。 | 1609459200 |
| 毫秒 | 13 | 在網頁技術中非常常見,尤其是 JavaScript. | 1609459200000 |
| 微秒 | 16 | 用於高頻交易或科學運算。 | 1609459200000000 |
搞清楚這些格式至關重要。如果工具預期接收秒數,而你卻提供毫秒數,將會得到一個數千年後的日期。這是我們都可能犯過的錯誤!
著名的 2038 年問題
Unix 時間戳記的優雅簡潔也製造了一顆定時炸彈:「2038 年問題。」在較舊的 32 位元 系統中,時間戳記以帶正負號的 32 位元整數儲存。問題在於這種整數有上限——它無法儲存大於 2,147,483,647.
在 2038 年 1 月 19 日 03:14:07 UTC,自紀元以來的秒數將超過此限制。當它超過時,整數會「溢位回繞」變為負數。這會導致易受攻擊的系統將日期解讀為 1901 年,可能使仍在運作的數十億台舊設備當機。您可以從 StrongDM 專家那裡獲得更多關於 Unix 紀元及其影響的洞見。
幸運的是,這並非我們大多數人日常需要擔憂的問題。絕大多數現代系統已改用 64 位元 整數來計時。64 位元整數容量極大,在接下來 2920 億年 內都不會溢位, effectively 根本解決了這個問題。
儘管如此,這段計算歷史的輝煌篇章,以及這些基礎知識,對於從事老舊嵌入式系統或傳統程式碼庫工作的你來說至關重要。理解這些基礎原理,能讓任何 Unix 時間戳轉換器在你手中成為更強大的工具。
在瀏覽器中輕鬆完成轉換
雖然使用終端機指令或程式碼片段可行,但这不總是最快的方法。有時候,你只是需要一個答案 立刻,不想打斷思路或切換視窗。這就是一款優秀的瀏覽器工具真正展現價值之處,特別是一個專門的 Unix 時間戳轉換器,它能直接存在於你的瀏覽器中。
這裡真正的魔力在於保持工作流暢。想像一下:你在瀏覽器的開發者工具中翻閱 API 回應,發現一個時間戳。不必另開分頁或啟動終端機,你只需按下快速鍵,貼上數字,答案隨即呈現。這就是像 ShiftShift 這類工具所能提供的無縫工作流程,它將許多實用工具整合到一個指令面板中。
透過快速鍵獲得即時答案
一切歸結於速度。使用像 ShiftShift 這樣的工具,只需快速輕按兩下 Shift 鍵(或是 Mac 上的 Cmd+Shift+P),就能叫出指令列。只需輸入「timestamp」,轉換器就會出現。貼上你的數值,立刻就能得到易讀的日期。
以下是實際運作樣貌——指令面板已準備就緒,隨時準備在你目前的頁面之上轉換時間戳。
最棒的是它能無縫整合而不會干擾你。轉換器只是同一個覆蓋層中眾多可用工具之一,因此你永遠不需要離開當前的工作。
這種方式對開發者、測試人員以及任何實際上生活在瀏覽器中的人來說都是一大福音。此外,轉換完全在你的本機上進行。來自日誌或 API 回應的敏感資料從不會離開你的電腦,這在隱私方面是一大勝利。
能夠轉換時間戳、重整混亂的 JSON 串,然後計算時間差——全部都在同一個介面完成——節省了大量時間。它將笨重的多工具流程轉變為單一、流暢的操作。
不僅僅是單一功能
一款優秀的瀏覽器工具很少只是單一功能;它是完整工具組的一部分。你會經常發現自己將時間戳轉換器與其他功能一起使用。
例如,你可能會將其與以下工具搭配:
- 一個 JSON 或 SQL 格式化工具,以便在提取時間戳之前先清理一些程式碼。
- 一個 內建計算機,用於快速處理 epoch 值的運算。(你可以到 ShiftShift 計算機頁面玩玩類似的工具,看看它的運作方式).
- 一個 文字比較工具,可找出兩個 API 回應、時間戳記等之間的差異.
將所有這些必備工具集中在一處,能創造出更快、更連貫的工作流程。這不僅是為了方便——更是為了消除那些微小、重複的干擾,這些干擾在一天之中不斷累積,會扼殺你的生產力.
程式碼中的實用時間戳記轉換
如果你是一名開發者,你就知道處理時間戳記只是工作的一部分。但老實說,語法在不同語言之間總有些不同。這一節是你的速查表,收錄了各種程式碼片段,你可以直接拿來用在你實際使用的平台上。不用再翻找舊的 Stack Overflow 討論串——這裡只有實用的範例,讓你能快速上手.

無論你是在處理前端網頁資料、編寫 Python 腳本,還是查詢資料庫,轉換 epoch 時間都是一項基本技能。我們將探討最常見的場景,從將 epoch 整數轉換為可讀的字串,到將整個過程逆轉過來.
在 JavaScript 中轉換時間戳記
JavaScript 的 Date 物件是你在這裡的主要工具,但它有一個主要怪癖,經常讓開發者栽跟斗:它是以 毫秒 運作,而非秒數。當你的前端與使用標準 10 位數、基於秒數的時間戳記的後端通訊時,這是一個經典的 bug 來源.
要將標準的 Unix 時間戳記(以秒為單位)正確轉換為 Date 物件,你必須將其乘以 1000.
// A standard 10-digit Unix timestamp (in seconds)
const unixTimestamp = 1672531200;
// Convert to milliseconds, then create a Date object
const dateObject = new Date(unixTimestamp * 1000);
// Format into a readable UTC string
// Output: Sun, 01 Jan 2023 00:00:00 GMT
console.log(dateObject.toUTCString());
需要目前的時間戳記嗎?Date.now()會以毫秒為單位提供給您。只要記得在將標準的10位數時間戳記傳回API之前,除以1000並向下取整即可。
使用Python處理轉換
在後端,Python的datetime模組是個強大的工具。它極具靈活性,並對時區感知轉換提供出色的支援,使其成為需要跨不同地區精確處理時間的服務之可靠選擇。
以下是使用datetime庫轉換時間戳記的簡潔方法:
import datetime
標準的10位數Unix時間戳記
unix_timestamp = 1672531200
將時間戳記轉換為datetime物件
datetime_obj = datetime.datetime.fromtimestamp(unix_timestamp)
將其格式化為清晰易讀的字串
輸出:2023-01-01 00:00:00
print(datetime_obj.strftime('%Y-%m-%d %H:%M:%S'))
這種簡單的方法為您在Python應用程式中管理epoch時間提供了乾淨可靠的途徑。如果您正在處理包含時間戳記的複雜數據結構(如JSON),您可能會覺得我們關於使用JSON格式化工具的指南對調試很有用。
使用SQL進行資料庫轉換
資料庫通常以Unix時間戳記形式儲存時間,因為它們效率高。好消息是,大多數SQL方言都有內建函數來處理這些轉換,可以直接在查詢中完成。這比提取原始整數時間戳記並在應用程式代碼中轉換要高效得多。
Unix時間戳記幾乎是通用的,被超過90%種程式語言使用——從JavaScript的Date.now()到Python的time.time()——驅動著數萬億次的日常操作。正確處理時區至關重要;一個穩健的unix時間戳記轉換器可以處理超過400個IANA時區,這有助於防止在估計62%的、未明確管理時區的全球應用程式中出現錯誤。您可以在Fossa.
對開發者而言,能夠在不離開自己電腦的情況下格式化SQL、轉換時間戳記並計算epoch差異,是生產力的一大提升。這種本地優先的方法也能讓您符合現代數據隱私標準,如GDPR和CCPA。
MySQL範例
在 MySQL 中,FROM_UNIXTIME() 函數是你最常使用的工具。它接收一個 epoch 整數,並將其巧妙地轉換成標準的 DATETIME 格式。
SELECT FROM_UNIXTIME(1672531200);
-- 回傳:'2023-01-01 00:00:00'
若要反向操作——從日期字串轉回 epoch 時間戳——只需使用 UNIX_TIMESTAMP().
SELECT UNIX_TIMESTAMP('2023-01-01 00:00:00');
-- 回傳:1672531200
PostgreSQL 範例
PostgreSQL 使用一個稍有不同的函數,但功能同樣強大:to_timestamp()。此函數可直接將 Unix 時間戳轉換為 TIMESTAMP WITH TIME ZONE 值。
SELECT to_timestamp(1672531200);
-- 回傳:2023-01-01 00:00:00+00
由於其天生具備時區感知能力,對於服務全球受眾且對時間精確度要求嚴格的應用程式而言,這是一個非常可靠的選擇。
掌握終端機中的時間戳轉換
如果你習慣使用命令列,為了快速轉換時間戳而切換到瀏覽器或圖形介面,確實會打斷工作流程,分散你的注意力。好消息是,你不必這麼做;Linux 和 macOS 都內建了強大的原生工具,讓你無需離開終端機就能處理這些轉換。
首選的實用工具是簡單的 date 指令。它幾乎存在於所有類 Unix 系統中,但有一個問題:在 Linux(GNU)和 macOS(BSD)上,將其用作 Unix 時間戳轉換器 的語法有所不同。了解這個差異是每次都能正確操作的關鍵。
在 Linux 上轉換時間戳
在 Linux 上,語法簡潔易記。你只需使用 -d 標誌來指定日期,但必須透過在時間戳前加上 @ 符號,來告訴它你提供的是 epoch 時間戳。
假設你正在查閱日誌,並發現時間戳 1704067200。要查看其實際含義,你可以執行以下指令:
date -d @1704067200
你立刻會得到一個易讀的日期,類似於 Mon Jan 1 00:00:00 UTC 2024。你也可以使用自訂格式來清理該輸出。
date -d @1704067200 +"%Y-%m-%d %H:%M:%S"
輸出:2024-01-01 00:00:00
專業提示:當你開始將其他命令管道化傳輸到這個命令時,它就變得非常強大。你可以
grep從龐大的日誌檔案中提取時間戳,並直接餵給date以立即進行轉換。這將多步驟的除錯任務轉變為單一、優雅的一行指令。
在 macOS 上處理轉換
現在,如果你在 Mac 上執行相同的 Linux 指令,它會產生錯誤。macOS 使用的 BSD 版本 date 需要改用 -r 旗標,而且不需要 @ 前綴。
以下是在 Mac 上轉換相同時間戳的方法:
date -r 1704067200
就像 Linux 版本一樣,你可以附加格式化選項來獲得確切想要的輸出。
date -r 1704067200 +"%Y-%m-%d %T %Z"
輸出:2024-01-01 00:00:00 UTC
這個微小的差異是經常在 Linux 和 macOS 之間切換的人經典的絆腳石。熟記這兩個版本將為你省去未來許多頭痛的問題。
一旦你掌握了這些指令,就可以將時間戳轉換直接融入你的 Shell 腳本和日誌分析中。這是一項小技能,但累積起來能帶來顯著的生產力提升,讓你保持專注於重要的工作。
常見的時間戳陷阱及其避免方法
表面上看來,使用 Unix 時間戳似乎很直接,但一些典型的錯誤可能導致真正令人抓狂的問題。這些問題有個討厭的特性,它們往往出現在遠離實際錯誤發生的地方,使得除錯變得非常頭痛。可以將本節視為你辨識和避開這些年來我所見最常見時間戳陷阱的實用指南。
秒與毫秒的混淆
到目前為止,最常見的錯誤就是混淆秒與毫秒。標準的 Unix 時間戳是一個 10位數 的整數,代表自紀元時間以來的秒數。但許多系統,特別是在 JavaScript 領域,使用的是代表毫秒的 13位數 時間戳。當前端應用程式將毫秒值傳遞給期望秒數的後端時,一切都會亂了套。
對 unix timestamp convertor 而言,那個 13 位數的數字看起來像是數千個未來的日期。這會悄悄地摧毀資料驗證、排程邏輯以及你試圖保存的任何歷史記錄。這是一種微妙的資料損壞,你可能數週都不会察覺。
時區陷阱
即使是經驗豐富的開發者也容易掉入時區處理的陷阱。就其本質而言,Unix 時間戳始終採用世界協調時間(UTC)。它代表一個獨立於地理位置的單一、普世的時間點。當你忘記這一點並假設時間戳反映的是用戶的本地時間時,陷阱就悄然出現。
這個錯誤通常發生在將時間戳轉換為可讀日期卻未指定時區時。你的系統往往預設採用伺服器的本地時間,進而引發混亂。紐約的用戶可能看到本應為倫敦某人顯示的時間,但實際相差數小時。
黃金法則很簡單:在後端始終將時間戳視為 UTC。以 UTC 格式儲存、以 UTC 格式處理,僅在前端顯示的瞬間才將其轉換為用戶的本地時間。
常見時間戳轉換錯誤的疑難排解
當系統出錯時,症狀可能令人困惑。以下是我根據經驗整理的快速參考表,助你即時診斷並修正常見問題。
| 症狀 | 可能原因 | 解決方案 |
|---|---|---|
| 日期顯示為 52361 年或其他遙遠的未來年份。 | 毫秒與秒數混淆。你將一個 13 位數的毫秒時間戳傳給了預期 10 位數秒時間戳的函數。 | 處理前先將時間戳除以 1000。務必驗證輸入時間戳的位數。 |
| 時間偏差數小時,但日期正確。 | 時區處理不當。時間戳使用伺服器的本地時間而非用戶時間或 UTC 進行了轉換。 | 確保所有轉換都明確指定目標時區。僅在客戶端轉換為本地時間。 |
| 日期停留在 1970 年 1 月 1 日。 | 無效或空值時間戳。時間戳值很可能是 0, null,或 undefined. |
嘗試轉換前,新增檢查以確保時間戳為有效的正整數。提供回退值。 |
出現「Invalid Date」或 NaN 錯誤。 |
資料類型錯誤。時間戳被當作字串或其他非數字類型處理,而函數要求的是數值。 | 在使用日期函數之前,先將時間戳記明確解析為整數(JS 中為 parseInt(),Python 中為 int())。 |
請記住,對輸入進行快速檢查可以節省您後續數小時的調試時間。
使用標準格式避免歧義
在系統之間傳遞數據時,依賴原始的整數時間戳記可能導致混淆。這就是為什麼採用像 ISO 8601 (2022-05-17T12:00:00Z) 這樣的通用字串格式作為標準,是一種極佳的防禦性措施。將 Unix 時間戳記(例如 1652905200)轉換為如此清晰、自帶文件說明的格式,有助於防止大約 37% 的跨時區 API 呼叫中出現錯誤。
考慮到 72% 的財富500強公司使用 Unix 時間戳記進行日誌分析,任何一個小小的失誤都可能導致每小時超過 $10,000 的停機損失,因此精確性至關重要。您可以閱讀更多關於紀元時間(epoch time)在不同行業中應用的資訊,請參閱 EpochConverter.
對於資料庫管理員來說,一致的時間戳記處理同樣關鍵。如果您發現自己經常為資料庫中不同的時間戳記格式而苦惱,那麼關於使用強大的 SQL 格式化工具 的指南可以幫助您保持查詢語句的整潔和可預測性。
這棵決策樹可以幫助您為作業系統選擇正確的命令,避免在需要快速轉換時出現語法錯誤。

上面的流程圖清楚地顯示了 Linux 上的 date 命令(-d @...)和 macOS 上的 -r ... 之間至關重要的語法差異——這是跨環境工作的開發者常遇到的陷阱。
為了使您的代碼更加穩健,請始終實作檢查以驗證傳入時間戳記的長度。一個簡單的函數,檢查數值是否為 10 位數(秒)或 13 位數(毫秒),可以在這些錯誤污染您應用程式邏輯之前就將它們捕獲。
關於 Unix 時間戳記的常見問題
一旦您掌握了 Unix 時間戳記,幾個實際問題幾乎總會浮現。我見過這些問題困擾過各個層級的開發者,所以讓我們澄清一下您在日常工作中會遇到的最常見問題。
為什麼許多 API 使用時間戳記而非 ISO 8601 字串?
這其實歸根結底在於原始效率。Unix 時間戳記只是一個單一數字,相較於像 '2023-10-27T10:00:00Z' 這樣的字串,它極其精簡。這種較小的尺寸意味著在網路傳輸時所需的數據更少,既能節省頻寬,也可能提升 API 回應速度。
它們也完全與語言無關。沒有歧義,沒有解析上的怪癖,也不必擔心地區性的格式問題。對機器來說,處理數字永遠比解析字串更快,因此任何日期計算——例如計算兩個事件之間的時間差——在運算上都更為廉價。對於高效能系統而言,這種簡潔性是一大優勢。
處理時區的正確方式是什麼?
這是個關鍵問題。以下是黃金法則:Unix 時間戳記永遠、永遠都是 UTC 時間。它本身並沒有內建任何時區概念。它只是從紀元開始計算的原始秒數。
時區只在你需要將時間戳記呈現給人類時才重要。
我的建議是?在後端所有地方都堅持使用 UTC。在資料庫中將其儲存為 UTC 時間戳記,在 API 中以 UTC 傳遞,所有伺服器端邏輯也使用 UTC 進行。唯一應該將其轉換為本地時區的時機,是在前端、也就是在顯示給使用者之前。單是這個實踐就能讓您免於一大堆時區和夏令時的錯誤。
我是否還需要擔心 2038 年問題?
對於大多數新專案來說,可能不用。所謂「2038 年問題」是早期系統的遺留物,這些系統使用 32 位元有符號整數 來儲存時間戳記。一旦這個數字過大,它就會溢位並變成負數,導致日期回到 1901 年。
值得慶幸的是,幾乎所有現代系統——從作業系統到資料庫——早已轉而使用 64 位元整數。這實際上將問題推到了遙遠的未來(事實上是數十億年),對我們來說已不再是一個實際的擔憂。
話雖如此,如果您正在維護遺留系統或處理嵌入式硬體(例如物聯網設備),這絕對是需要留意的事情。務必清楚您所建構的系統架構。
如何在 Excel 或 Google 試算表中快速轉換時間戳記?
為此,您不需要將數據匯出到單獨的 Unix 時間戳記轉換器。一個簡單的公式就能搞定。假設您的時間戳記在儲存格 A1 中:
- 針對以秒為單位的時間戳記(10 位數):
=A1 / 86400 + DATE(1970,1,1) - 對於毫秒格式的時間戳記(13位數):
=A1 / 86400000 + DATE(1970,1,1)
只需輸入這個公式,然後將儲存格格式設為「日期」或「日期時間」。當你快速分析資料匯出且不想打斷工作流程時,這個方法能省下不少功夫。
是否厭倦了為了簡單任務不斷在編輯器、命令列和十幾個瀏覽器分頁之間切換?ShiftShift Extensions套件將強大的Unix時間戳記轉換器、JSON格式化工具、SQL美化器等功能直接整合到瀏覽器中。所有你需要的工具,只要一個鍵盤快速鍵就能輕鬆取用。