ToolAct工具行動

時間戳轉換工具

Unix 時間戳與日期時間格式互相轉換

0
點選時間戳可複製(北京時間 UTC+8)

時間戳轉日期

標準格式-
ISO 8601-
中文格式-
自訂格式-

日期轉時間戳

秒級時間戳-
毫秒級時間戳-
Unix 時間-

全球時區對比

北京 (UTC+8)--
东京 (UTC+9)--
新加坡 (UTC+8)--
伦敦 (UTC+0/+1)--
巴黎 (UTC+1/+2)--
纽约 (UTC-5/-4)--
洛杉矶 (UTC-8/-7)--
悉尼 (UTC+10/+11)--

常用格式範例

YYYY-MM-DD HH:mm:ss
YYYY/MM/DD HH:mm:ss
YYYY-MM-DD
HH:mm:ss
YYYYMMDDHHmmss

什麼是時間戳?

時間戳(Timestamp)是表示特定時間的數字值。Unix 時間戳是從 1970年1月1日00:00:00 UTC(稱為 Unix 紀元)到指定時間所經過的秒數。它是計算機系統中表示時間的標準方式,具有跨平臺、跨時區一致的特點。時間戳分為秒級(10位數字)和毫秒級(13位數字),秒級時間戳常用於 Unix/Linux 系統,毫秒級常用於 JavaScript 等程式設計語言。

使用方式

時間戳記轉日期

  1. 在左側卡片中輸入 Unix 時間戳記
  2. 選擇目標時區(例如:北京時間 UTC+8)
  3. 點選「轉換」按鈕查看轉換後的日期時間
  4. 結果包含:標準格式、ISO 8601、中文格式等

日期轉時間戳記

  1. 在右側卡片中選擇日期與時間
  2. 選擇該日期時間所使用的來源時區
  3. 點選「轉換」按鈕取得 Unix 時間戳記
  4. 結果包含秒與毫秒時間戳記

時區小提示

  • 請確認原始數值是使用秒或毫秒;混用 10 位數與 13 位數的時間戳記是造成日期錯誤的常見原因。
  • 轉換人可讀日期時,務必確認預期的時區,特別是在處理日誌、排程任務與跨區域系統時。

使用場景

將 Unix 時間戳轉換為可讀日期貼上秒級或毫秒級時間戳,工具會自動偵測較短的秒級數值,必要時轉換為毫秒,然後在所選時區中顯示標準、ISO、中文和自訂格式的日期。10 位數值視為秒級,13 位數值視為毫秒級,能在最常見的混用錯誤擴散到錯誤日期之前就將其捕捉。
從日期時間輸入建立時間戳選擇本地日期時間並將其轉換為秒級、毫秒級時間戳以及範例 Unix date 命令。快速操作可將時間戳欄位設為今天、明天、本週開始、本月開始或今年開始。轉換僅讀取瀏覽器的本地系統時鐘,不涉及遠端時間服務、NTP 查詢或遠端 API,因此在任何時鐘設定正確的機器上都能產生可重複的結果。
跨主要時區比較當前時間頁面每秒更新當前時間戳,顯示北京、東京、倫敦、巴黎、紐約、洛杉磯和雪梨等城市的即時時間,並提供可直接複製的常用格式範例。ISO 8601 和 RFC 3339 這兩種顯示格式幾乎相同;ISO 8601 允許許多可選分隔符,而 RFC 3339 是更嚴格的規範,固定格式並要求明確的偏移量,對於日誌和 API 載荷來說是更安全的選擇。
在不同格式之間轉換日誌行將日誌項目如 '2024-05-12T08:30:00Z' 或 '1700000000' 貼入輸入框,在標準、ISO、RFC、中文和自訂格式之間切換,然後複製符合您的日誌管線或 grep 查詢的格式。
驗證快取 TTL 和 JWT 過期時間從當前紀元秒數減去 Cache-Control: max-age 值,或貼上 JWT exp claim 以確認令牌是否仍然有效、即將過期或已經過期。撤銷工作階段前請務必向簽發服務驗證。使用 32 位有號整數儲存 Unix 秒數的舊系統將在 2038-01-19 03:14:07 UTC 溢位,即所謂的 Y2038 問題,因此仍在服役的 2010 年前韌體在傳入超過 2038 年的時間戳前應先檢查此限制。

技術原理

Unix 時間戳計算自 Unix 紀元以來經過的時間,該紀元定義為 1970-01-01T00:00:00Z,是 POSIX 時間用來標記其後所有時刻的零點。POSIX 時間刻意忽略閏秒:每個日曆日被視為恰好 86,400 秒,因此跨越閏秒插入的兩個時間戳與嚴格的原子鐘計數會有一秒的偏差,但權衡之下,紀元秒與 UTC 日曆欄位之間的轉換始終是乾淨的 86,400 取模運算。 日常最常見的兩種格式是秒級(目前為 10 位數字,例如 1717000000)和毫秒級(13 位數字,例如 1717000000000)。JavaScript 的 Date.now() 返回自紀元以來的毫秒數,`new Date(ms)` 接受毫秒數,而 Unix 的 `date +%s`、Go 的 time.Unix 以及大多數資料庫的 TIMESTAMP 欄位使用秒數。基於長度的偵測是常用的消歧方式:10 位數值作為秒數解讀時落在 2001-2286 年範圍內,而相同的值作為毫秒數解讀則落在 1970 年。 顯示時間戳需要時區資訊。UTC 使用後綴 `Z` 表示;其他偏移量使用 `±HH:MM`(例如中國標準時間為 `+08:00`,美國東部標準時間為 `-05:00`)。ISO 8601 允許多種可選分隔符,而 RFC 3339 是更嚴格的規範,固定了分隔符格式,這就是為什麼 API 規格通常要求使用帶有明確偏移量的 RFC 3339。使用 32 位有號整數儲存紀元秒數的舊系統將在最大正值 2147483647 時溢位,解碼為 2038-01-19T03:14:07Z(Y2038 問題);64 位儲存將邊界推至遠超人類相關的範圍。

  • Unix 紀元固定為 1970-01-01T00:00:00Z,POSIX 時間忽略閏秒,因此每一天都被視為恰好 86,400 秒。
  • JavaScript Date.now() 返回毫秒數;`Math.floor(Date.now() / 1000)` 轉換為秒級時間戳。
  • Y2038 邊界:有號 32 位時間戳在 2147483647 = 2038-01-19T03:14:07Z 時溢位;64 位儲存可避免此問題。
  • ISO 8601 與 RFC 3339:RFC 3339 是更嚴格的 ISO 8601 規範,要求明確的偏移量(`Z` 或 `±HH:MM`),適用於 API 和日誌。
  • ECMAScript Date 限制在紀元前後 ±100,000,000 天(約 ±273,785 年),因此 `new Date(8.64e15)` 和 `new Date(-8.64e15)` 是絕對邊界。
  • JWT 的 `exp`、`iat` 和 `nbf` 聲明、`Cache-Control: max-age` 以及 Cookie 的 `Expires` 都使用 Unix 秒數(RFC 7519、RFC 7234),因此可以直接與 `Math.floor(Date.now()/1000)` 進行加減運算。
  • 時區影響顯示的日期時間,但不影響時間戳值本身;同一紀元秒在 UTC+8 和 UTC-5 中會顯示為不同的時鐘時間。

範例

將 10 位 Unix 時間戳轉換為可讀日期

輸入:  1781526600
UTC:    2026-06-15 12:30:00
北京 (UTC+8): 2026-06-15 20:30:00
ISO 8601: 2026-06-15T12:30:00Z

POSIX: IEEE 1003.1 將 Unix 時間定義為自 1970-01-01 00:00:00 UTC(Epoch)以來的秒數
ISO: ISO 8601 定義 YYYY-MM-DDThh:mm:ssZ 格式以明確表示日期時間

將日期反向轉回時間戳

輸入: 2026-01-01 00:00:00 (UTC)
秒(10 位):             1767225600
毫秒(13 位):           1767225600000
Unix 指令:               date -d @1767225600

備註: JavaScript Date.getTime() 回傳毫秒;Python time.time() 回傳秒(浮點數)
POSIX: time_t 型別傳統上是 32 位元或 64 位元有號整數

辨別秒與毫秒

1781526600     -> 10 位,秒   -> 2026-06-15 12:30:00 UTC
1781526600000  -> 13 位,毫秒 -> 2026-06-15 12:30:00.000 UTC

常見錯誤:將 13 位數值當作秒解讀會得到約西元 74,000 年
快速判斷:10-11 位 = 秒(1970-2286),13 位 = 毫秒(JavaScript 預設)

解碼 JWT exp 宣告

JWT payload: { "exp": 1798617600 }
解碼後:     2027-01-01 00:00:00 UTC
目前時間:   1781526600
剩餘有效:   17,091,000 秒(約 198 天)

RFC: RFC 7519 第 2 節將 NumericDate 定義為自 Epoch 以來的秒數

Y2038 邊界檢查

32 位元有號最大時間戳: 2147483647
解碼後:                      2038-01-19 03:14:07 UTC
再過一秒:                    2147483648 -> 在舊式 32 位元系統上溢位

解法: 使用 64 位元 time_t(現代 Linux/macOS 預設)或以 ISO 8601 字串儲存
POSIX: 32 位元 time_t 系統將於 2038-01-19 之後發生環繞

常見問題

什麼是 Unix 時間戳?

從 1970-01-01 00:00:00 UTC(即「Unix 紀元」)算起經過的秒數。JavaScript 與許多 API 改用同一紀元起算的毫秒數(Unix 時間戳 × 1000)。本頁兩種格式都接受,並會以本地時間和 UTC 顯示對應的日期。

秒、毫秒、微秒、奈秒有什麼差別?

不同系統使用不同精度。Unix `time()` 回傳秒;JavaScript 的 Date.now() 回傳毫秒;Java 的 Instant 支援奈秒。頁面會依位數自動判斷:10 位 = 秒(範圍涵蓋 2001-2286 年)、13 位 = 毫秒、16 位 = 微秒、19 位 = 奈秒。

為什麼 2038 年 1 月 19 日很重要?

這就是「2038 年問題」:32 位元有號的 Unix 時間戳會在 2038-01-19 03:14:07 UTC 時溢位,仍使用 32 位元 time_t 的系統會跳回 1901 年。現代 64 位元系統可撐數十億年無虞,但舊式嵌入式系統需要修正。

如何處理時區?

Unix 時間戳本質上就是 UTC。頁面會顯示你的本地時間和 UTC,並可額外選擇任一 IANA 時區(Asia/Shanghai、America/New_York、Europe/London)顯示。各時區的日光節約時間會自動套用。

為什麼某些情況下「YYYY-MM-DD」會被當成 UTC 解析?

ISO 8601 沒有時區資訊的日期是有歧義的。JavaScript 的 Date 建構式會把純日期字串視為 UTC、把日期時間字串視為本地時間,這是有名的「差一天」錯誤源頭。本頁會明確標示套用的時區。

換算是在本機完成的嗎?

是的。底層用的是 JavaScript Date 加上 Intl.DateTimeFormat,不會上傳任何時間戳。

可以產生未來的時間戳嗎?

可以。選一個未來日期,頁面就會回傳對應的時間戳。適合用來設定 JWT 的 exp 欄位、cron 工作的測試日期,或程式中的快取過期時間。