> 時間戳 | 紀元時間 | 轉換 <
// 即時將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日。
// 常見的 epoch 數值
除錯時間戳時很有用的參考點,所有日期均為 UTC。
| Epoch 數值 | 日期和時間(UTC) |
|---|---|
| 0 | 1970-01-01 00:00:00 |
| 86400 | 1970-01-02 00:00:00 |
| 946684800 | 2000-01-01 00:00:00 |
| 1000000000 | 2001-09-09 01:46:40 |
| 1234567890 | 2009-02-13 23:31:30 |
| 1700000000 | 2023-11-14 22:13:20 |
| 2000000000 | 2033-05-18 03:33:20 |
| 2147483647 | 2038-01-19 03:14:07 |
| 4294967295 | 2106-02-07 06:28:15 |
// 在程式碼中將 epoch 轉換為日期
JavaScript new Date(epoch * 1000).toISOString()
Python datetime.fromtimestamp(epoch, tz=timezone.utc)
PHP gmdate('c', $epoch)
Go time.Unix(epoch, 0).UTC()
Java Instant.ofEpochSecond(epoch)
MySQL FROM_UNIXTIME(epoch)
Bash date -u -d @$epoch # macOS: date -u -r $epoch
>> 更多問題
問:為什麼 Unix 時間從 1970 年 1 月 1 日開始?
答:1971 年前後,貝爾實驗室的早期 Unix 開發者選了一個簡單、整齊且當時較新的日期,以便讓 32 位元計數器保持較小。它沿用至今,成為大多數系統的標準紀元。
問:如何在 Excel 或 Google 試算表中把 epoch 轉成日期?
答:假設 A1 是 epoch 秒數,輸入 =(A1/86400)+25569,再把儲存格格式設為日期時間。毫秒則除以 86400000。反向公式為 =(A1-25569)*86400。
問:為什麼 epoch 轉換結果和預期的日期不一樣?
答:常見原因:秒與毫秒混淆(13 位數是毫秒)、顯示時區不同(同一個 epoch 在 UTC 與本地時間顯示不同)、系統使用了其他紀元(NTP 為 1900 年,Windows FILETIME 為 1601 年)。
問:epoch 的最大值是多少?
答:有號 32 位元整數最大為 2,147,483,647(2038-01-19 03:14:07 UTC),無號 32 位元為 4,294,967,295(2106-02-07 06:28:15 UTC)。64 位元數值可表示數千億年。