時間戳 | 紀元時間 | 轉換

> 時間戳 | 紀元時間 | 轉換 <

// 即時將Unix時間戳轉換為日期,或將日期轉換為時間戳

當前時間戳
[即時]

即時時鐘

即時更新的Unix時間戳顯示。即時查看當前的epoch時間。

[雙向]

雙向轉換

將時間戳轉換為可讀日期,或將日期轉換為時間戳。支援兩個方向。

[免費]

多種格式

以ISO 8601、RFC 2822、UTC、本地時間和相對時間格式查看結果。

// 關於UNIX時間戳

Unix時間戳工作原理:

Unix時間戳(也稱為epoch時間或POSIX時間)表示自1970年1月1日 00:00:00 UTC(Unix紀元)以來經過的秒數。這個簡單的整數值提供了一種通用的、不依賴時區的時間表示方式。

範例:

1711324800 → 2024-03-25T00:00:00.000Z

常見用例:

  • >資料庫時間戳儲存和查詢
  • >API回應時間欄位
  • >日誌檔案時間戳分析
  • >除錯時間相關問題
  • >跨時區時間協調
  • >Y2K38問題:32位元有號整數將在2038年1月19日溢出

>> 常見問題

問:什麼是Unix時間戳?

答:Unix時間戳是自1970年1月1日 00:00:00 UTC以來經過的秒數。它是計算機科學中普遍使用的簡單整數值。

問:什麼是epoch時間?

答:Epoch時間是Unix時間戳的另一個名稱。「紀元」指的是參考點:1970年1月1日 00:00:00 UTC。

問:什麼是Y2038問題?

答:2038年問題(Y2K38)是因為許多系統將Unix時間戳儲存為32位元有號整數,只能表示到2038年1月19日 03:14:07 UTC的時間。

問:秒和毫秒時間戳有什麼區別?

答:秒級Unix時間戳為10位數(如:1711324800),毫秒級為13位數(如:1711324800000)。

問:Unix時間戳可以是負數嗎?

答:可以,負的Unix時間戳表示1970年1月1日之前的日期。例如,-86400表示1969年12月31日。

// 時間戳位數速查表

數一數位數就能判斷單位。把秒和毫秒搞混,是日期顯示錯誤最常見的原因。

位數單位範例常見來源
10s1711324800Unix/Linux, PHP time(), Stripe
13ms1711324800000JavaScript Date.now(), Java
16µs1711324800000000Kafka, Cassandra
19ns1711324800000000000Go UnixNano(), InfluxDB

// 在程式碼中取得目前時間戳

JavaScript  Math.floor(Date.now() / 1000)
Python      int(time.time())
PHP         time()
Go          time.Now().Unix()
Java        Instant.now().getEpochSecond()
Ruby        Time.now.to_i
Bash        date +%s

>> 更多問題

問:Unix 時間戳是 UTC 還是本地時間?

答:一律是 UTC。這個整數代表一個絕對時刻,本身不帶時區;只有在顯示為日期時才會套用時區。建議儲存 UTC,顯示時再轉換為本地時間。

問:為什麼我的時間戳顯示的日期不對?

答:通常是秒和毫秒混淆:13 位數當作秒會得到約 55000 年,10 位數當作毫秒則會得到 1970 年 1 月。另外請檢查時區轉換,以及該值是否其實是 Windows FILETIME 或 Excel 日期序號。

問:閏秒會影響 Unix 時間戳嗎?

答:不會。Unix 時間每天固定以 86,400 秒計算,忽略閏秒,閏秒會被重複或平滑分攤(leap smear)。對絕大多數應用已經足夠;科學計時請使用 TAI。

問:除了 Unix 還有其他紀元嗎?

答:有。NTP 使用 1900-01-01,Windows FILETIME 使用 1601-01-01(以 100 奈秒為單位),Excel 從 1899-12-30 起以天計數,Mac HFS+ 使用 1904-01-01。如果某個值與目前的 Unix 數值相差很大,很可能就是這些變體之一。

// 其他語言