時間戳轉換器
在 Unix 時間戳和可讀日期之間即時轉換——還支援 Windows FILETIME、.NET Ticks、LDAP/AD、Chrome WebKit 與 Excel OADate。貼上任意值即可自動偵測格式,支援一鍵複製。
轉換器
0 0 時間戳 → 日期
日期 → 時間戳
什麼是 Unix 時間戳?
Unix 時間戳(也稱 Unix 紀元時間 或 POSIX 時間)是指自 1970-01-01 00:00:00 UTC(Unix 紀元)以來經過的秒數。這是程式設計中表示時間點最常見的方式。
例如,1700000000 對應 2023 年 11 月 14 日 22:13:20 UTC。
Unix 時間戳的特性:
- 與時區無關 — 始終以 UTC 為基準
- 連續 — 大多數實作中不包含閏秒
- 精簡 — 一個整數即可表示完整日期
秒與毫秒
Unix 時間戳有兩種常見精度:
| 秒 | 毫秒 | |
|---|---|---|
| 範例 | 1700000000 | 1700000000000 |
| 精度 | 1 秒 | 1 毫秒 |
| 使用者 | Unix/Linux API、大多數資料庫 | JavaScript(Date.now())、Java、日誌系統 |
| 位數 | 約 10 位 | 約 13 位 |
如何區分: 如果數字有 13 位或更多,就是毫秒。本轉換器會自動偵測精度——只需貼上數字即可。
常見使用情境
- 偵錯日誌 — 將伺服器日誌中的時間戳轉換為可讀時間以追蹤事件
- API 整合 — 許多 REST API 使用 Unix 時間戳作為日期欄位
- 資料庫查詢 — 使用紀元值依時間範圍查詢記錄
- 排程 — 使用時間戳運算計算延遲或安排未來事件
- UUID v7 — UUID v7 的前 48 位元嵌入了毫秒級 Unix 時間戳;解碼它即可檢視 UUID 的建立時間
- Active Directory 管理 — 將
lastLogon、pwdLastSet、accountExpires等 LDAP 時間戳轉換為可讀日期,用於使用者稽核 - Excel / Office 自動化 — 在與電子表格及
DateTime.FromOADate互通時解碼 OADate 序號 - Chrome 鑑識 — 讀取
History、Cookies的 SQLite WebKit 時間戳,用於偵錯或數位鑑識
什麼是 Windows FILETIME?
Windows FILETIME 是一個 64 位元值,計算自 1601-01-01 00:00:00 UTC 起的 100 奈秒間隔數。它是 Win32 API、NTFS 檔案系統與 COM/OLE 的原生時間格式。
FILETIME 結構將值儲存為兩個 32 位元 DWORD:dwLowDateTime 與 dwHighDateTime。你會在 GetFileTime()、CoFileTimeNow() 以及 NTFS 主檔案表(MFT)記錄中遇到它。
轉換公式:
unix_seconds = (filetime / 10000000) - 11644473600例如,133592755356230000 → 2024-05-04 04:32:15 UTC。本轉換器會自動將低於 ~3 × 10¹⁷ 的 18 位數值偵測為 FILETIME。
什麼是 .NET DateTime Ticks?
.NET Ticks 是一個 64 位元有號整數,計算自 0001-01-01 00:00:00 UTC(公元 1 年)起的 100 奈秒間隔數。它是 C#/.NET 中 DateTime 的底層儲存,可透過 DateTime.Now.Ticks 存取。
其範圍涵蓋 0001-01-01 到 9999-12-31,單一 long 值最大約為 3.16 × 10¹⁸。與 FILETIME(基於 1601 年)不同,.NET ticks 從公元 1 年開始,以避免負值並簡化行事曆運算。
例如,638514336000000000 ticks → 2024-05-16 00:00:00 UTC。大於等於 ~3 × 10¹⁷ 的值會被偵測為 .NET ticks;低於該閾值則更可能是 FILETIME。
什麼是 LDAP / Active Directory 時間戳?
LDAP 時間戳(Microsoft Active Directory 使用)在數值上與 FILETIME 完全相同——都是自 1601-01-01 UTC 起的 100 奈秒間隔。差異僅在於使用情境:lastLogon、lastLogonTimestamp、pwdLastSet、accountExpires 等 AD 屬性在 LDAP 架構下儲存 FILETIME 值。
AD 管理員經常需要轉換這些值來稽核使用者活動和密碼到期。在 PowerShell 中:
[DateTime]::FromFileTime($value).ToString('yyyy-MM-dd HH:mm:ss')例如,132514560000000000 → 2020-12-03 00:00:00 UTC。accountExpires 為 9223372036854775807(Int64.MaxValue)表示「永不過期」。
什麼是 Chrome / WebKit 時間戳?
Chrome 與 WebKit 時間戳計算的是自 1601-01-01 UTC 起的微秒數(不是 100 奈秒)。它們出現在 Chrome 的 History、Cookies 和 Login Data SQLite 資料庫中——對偵錯、鑑識和資料復原很有用。
由於單位是 μs(不是 100ns),同一時刻的值比 FILETIME 小 10 倍。當前時代的值通常是 17 位(約 1.3 × 10¹⁶)。
用 SQL 查詢 Chrome 歷史記錄:
SELECT datetime(time / 1000000 - 11644473600, 'unixepoch') AS visit_time
FROM urls ORDER BY visit_time DESC LIMIT 10;例如,13317696000000000 → 2023-01-09 00:00:00 UTC。
什麼是 Microsoft OADate / Excel 序號?
OADate(OLE Automation Date)是一個 double,計算自 1899-12-30 起的天數。小數部分表示一天中的時間(0.5 = 正午)。Excel、Google Sheets 和 Office 自動化內部都使用這種序號格式。
為什麼是 1899-12-30 而不是 1900-01-01?Excel 有意重現了一個 1900 年閏年 bug(1900 年並非閏年,但 Lotus 1-2-3 把它當作閏年處理)。將紀元往回移兩天可以保持 Excel 日期與該歷史 bug 的相容性。
例如,45678.5 → 2025-01-21 12:00:00。在 C# 中:DateTime.FromOADate(45678.5)。在 Excel 中:=DATE(2025,1,21) 傳回 45678。
常見問題
什麼是 2038 年問題? 32 位元有號整數的 Unix 時間戳最大值為 2147483647(2038 年 1 月 19 日 03:14:07 UTC)。仍在使用 32 位元 time_t 的系統將會溢位。大多數現代系統已遷移至 64 位元時間戳,在 2920 億年內不會溢位。
此工具如何處理時區? Unix 時間戳本質上是 UTC。本轉換器同時顯示 UTC 表示和瀏覽器的本地時區,讓您始終獲得兩種視角。
可以使用負時間戳嗎? 可以。負的 Unix 時間戳表示紀元(1970-01-01 00:00:00 UTC)之前的日期。例如,-86400 是 1969 年 12 月 31 日 00:00:00 UTC — 恰好在紀元前一天。
FILETIME 和 LDAP 時間戳有什麼區別? 在數值上完全相同——都是自 1601-01-01 UTC 起的 100 奈秒間隔。「FILETIME」是 Win32/COM 的名稱;「LDAP 時間戳」指的是儲存在 lastLogon 等 Active Directory 屬性中的同一個值。兩者使用相同的轉換公式。
為什麼 .NET DateTime Ticks 從公元 1 年開始? .NET 的行事曆從 0001-01-01(公曆的慣例起點)開始,這樣所有有效日期都會產生正的 tick 值。這避免了 FILETIME 的 1601 紀元可能帶來的符號處理複雜性,並簡化了 0001–9999 全範圍的日期運算。
為什麼 OADate 紀元是 1899 年 12 月 30 日? Excel 從 Lotus 1-2-3 繼承了一個 bug,把 1900 年當作閏年處理(實際上不是)。為了讓 1900 年 3 月 1 日這樣的日期在 Excel 和現實中保持一致,OLE Automation 紀元被設為 1899-12-30——比名義上的「1900 年 1 月 1 日」早兩天,以補償虛構的 1900 年 2 月 29 日。