🕐

Linux 時間戳轉換器 常見問題

Q: 什麼是 Unix 時間戳?

A: Unix 時間戳(也稱為 POSIX 時間或紀元時間)是自 1970 年 1 月 1 日 00:00:00 UTC 起經過的秒數,不包含閏秒。它是一個簡單的整數,無論在哪個時區,都代表相同的時刻。

Q: 如何將 Unix 時間戳轉換為人類可讀的日期?

A: 您可以透過以下幾種方式轉換 Unix 時間戳:

  • 線上轉換:使用我們的 Unix 時間戳轉換器 即時轉換
  • Linux 終端機:執行 date -d @1785292800(GNU Linux)或 date -r 1785292800(macOS)
  • JavaScriptnew Date(timestamp * 1000).toISOString()
  • Pythondatetime.utcfromtimestamp(1785292800)
  • PHPdate("Y-m-d H:i:s", 1785292800)

Q: 秒級與毫秒級時間戳有什麼區別?

A: 秒級時間戳是 10 位數(例如 1785292800)。毫秒級時間戳是 13 位數(例如 1785292800000),因為它將秒值乘以 1000。JavaScript 的 Date.now() 回傳毫秒,而大多數其他系統和 API 使用秒。不小心混用會產生極大偏差的日期——在需要秒的地方使用毫秒會得到大約 56,000 年後的日期。

轉換前務必確認資料來源的精度。如果不確定,數一下位數:10 位數 = 秒,13 位數 = 毫秒。

Q: Unix 時間戳可以表示 1970 年之前的日期嗎?

A: 可以。1970 年 1 月 1 日之前的日期以負數表示。例如,時間戳 -3600 對應的是 1969 年 12 月 31 日 23:00:00 UTC。並非所有轉換工具都能正確處理負數時間戳,但我們的線上轉換器可以。程式語言普遍都支援。

Q: 什麼是 2038 年問題?

A: 2038 年問題(也稱為 Y2K38)是一個時間表示問題,影響以 32 位元帶符號整數儲存時間戳的系統。最大值為 2147483647,對應的是 2038 年 1 月 19 日 03:14:07 UTC。一秒後,該值溢位為 -2147483648,被解讀為 1901 年 12 月 13 日。

大多數現代 64 位元系統不受影響,但嵌入式設備、舊版資料庫及部分 32 位元系統仍存在風險。解決方案是遷移到 64 位元時間表示法,可提供約 2920 億年的範圍。

Q: Unix 時間戳是否計入閏秒?

A: 不。Unix 時間戳有意忽略閏秒。每天都被視為剛好 86,400 秒,即使 UTC 增加了閏秒也是如此。在插入閏秒期間,Unix 時間戳不會前進一秒,實際上是跳過了該閏秒。這意味著 Unix 時間戳與原子時間之間存在一個很小(目前約 27 秒)但會累積的偏差。

Q: 轉換 Unix 時間戳時如何處理時區?

A: Unix 時間戳在任何地方都代表相同的時刻。時區只在您將其顯示為人類可讀日期時才重要。始終以原始整數形式儲存時間戳,僅在顯示時才轉換為當地時間。使用 IANA 時區名稱,如 America/New_York,而非 EST 或 PST 等縮寫,因為縮寫無法反映夏令時間。我們的 Unix 時間戳轉換器 可同時顯示多個時區的結果。

Q: Unix 時間戳的最大值是多少?

A: 最大值取決於儲存時使用的整數大小:

  • 32 位元帶符號整數2147483647(2038 年 1 月 19 日 03:14:07 UTC)
  • 32 位元無符號整數4294967295(2106 年 2 月 7 日 06:28:15 UTC)
  • 64 位元帶符號整數9223372036854775807(距今約 2920 億年)

大多數現代系統使用 64 位元整數,提供了幾乎無限的範圍。常見的做法是在資料庫欄位或資料結構中以 64 位元類型(SQL 中的 BIGINT)儲存時間戳,這是面向未來的做法。

Linux 時間戳轉換器 常見問題 - CoolTool