Skip to content

時間戳轉換器

Unix 時間戳和可讀日期之間即時轉換——還支援 Windows FILETIME.NET TicksLDAP/ADChrome WebKitExcel OADate。貼上任意值即可自動偵測格式,支援一鍵複製。

轉換器

即時 Unix 時間戳
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 時間戳有兩種常見精度:

毫秒
範例17000000001700000000000
精度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 管理 — 將 lastLogonpwdLastSetaccountExpires 等 LDAP 時間戳轉換為可讀日期,用於使用者稽核
  • Excel / Office 自動化 — 在與電子表格及 DateTime.FromOADate 互通時解碼 OADate 序號
  • Chrome 鑑識 — 讀取 HistoryCookies 的 SQLite WebKit 時間戳,用於偵錯或數位鑑識

什麼是 Windows FILETIME?

Windows FILETIME 是一個 64 位元值,計算自 1601-01-01 00:00:00 UTC 起的 100 奈秒間隔數。它是 Win32 API、NTFS 檔案系統與 COM/OLE 的原生時間格式。

FILETIME 結構將值儲存為兩個 32 位元 DWORD:dwLowDateTimedwHighDateTime。你會在 GetFileTime()CoFileTimeNow() 以及 NTFS 主檔案表(MFT)記錄中遇到它。

轉換公式:

unix_seconds = (filetime / 10000000) - 11644473600

例如,1335927553562300002024-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-019999-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 奈秒間隔。差異僅在於使用情境:lastLogonlastLogonTimestamppwdLastSetaccountExpires 等 AD 屬性在 LDAP 架構下儲存 FILETIME 值。

AD 管理員經常需要轉換這些值來稽核使用者活動和密碼到期。在 PowerShell 中:

powershell
[DateTime]::FromFileTime($value).ToString('yyyy-MM-dd HH:mm:ss')

例如,1325145600000000002020-12-03 00:00:00 UTCaccountExpires9223372036854775807Int64.MaxValue)表示「永不過期」。

什麼是 Chrome / WebKit 時間戳?

Chrome 與 WebKit 時間戳計算的是自 1601-01-01 UTC 起的微秒數(不是 100 奈秒)。它們出現在 Chrome 的 HistoryCookiesLogin Data SQLite 資料庫中——對偵錯、鑑識和資料復原很有用。

由於單位是 μs(不是 100ns),同一時刻的值比 FILETIME 小 10 倍。當前時代的值通常是 17 位(約 1.3 × 10¹⁶)。

用 SQL 查詢 Chrome 歷史記錄:

sql
SELECT datetime(time / 1000000 - 11644473600, 'unixepoch') AS visit_time
FROM urls ORDER BY visit_time DESC LIMIT 10;

例如,133176960000000002023-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.52025-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 日。