Excel Date Converter

Excel OADate 轉 Unix 時間戳轉換器

把 Excel OADate 轉換為 Unix 時間。精確公式與大數支援。輸出:秒、毫秒、ISO 8601 與可讀格式。

自 1899-12-30 以來的天數

目前時間 — Excel 序列號日期 / OADate
Unix 時間戳(秒)

什麼是 Excel 序列日期?

Excel 將日期儲存為序列號:整數部分是自系統紀元以來的天數,小數部分是一天中的時間。在預設的 1900 日期系統中,序列號 1 是 1900 年 1 月 1 日。.NET 和 COM 使用的 OLE Automation Date(OADate)採用相同的天數計數,但從 1899 年 12 月 30 日起算。

  • 第 0 天(OADate)= 1899-12-30;Excel 序列號 1 = 1900-01-01
  • 整數部分 = 天數,小數部分 = 24 小時一天的比例
  • 範例:45244.92592593 → 2023-11-14 22:13:20
  • OADate 由 .NET 的 DateTime.ToOADate() 產生

如何將 Excel 日期轉換為 Unix 時間

Excel/OADate 起點(1899-12-30)與 Unix 紀元(1970-01-01)之間相差 25,569 天。減去它,再乘以一天的秒數。

  • Unix seconds = (ExcelSerial − 25569) × 86400
  • Unix milliseconds = (ExcelSerial − 25569) × 86400000
  • 反向:ExcelSerial = Unix seconds / 86400 + 25569
  • 本轉換器將輸入視為 UTC 掛鐘值

1900 年閏年錯誤

為與 Lotus 1-2-3 向後相容,Excel 錯誤地把 1900 年當作閏年,並包含一個不存在的 1900 年 2 月 29 日(序列號 60)。對於 1900 年 3 月 1 日及以後的任何日期,標準偏移 25,569 都是正確的;只有 60 及以下的序列號會受影響。現實中的大多數資料都遠在此之後,因此該錯誤在實務中很少有影響——但這就是偏移為 25,569 而非 25,568 的原因。

  • 序列號 60 = 幽靈日期 1900-02-29;序列號 61 = 1900-03-01
  • 1900-03-01 之前的日期在 1900 系統中相差一天
  • 1904 日期系統(舊版 Mac Excel)改為從 1904-01-01 起算

相關時間戳記格式轉換器

其他試算表日期系統

Excel 的 1900 系統最常見,但不是唯一的:

  • Excel 1904 日期系統(舊版 Mac 預設)以 1904-01-01 為第 0 天;到 Unix 的偏移為 24107
  • Google 試算表為相容而採用 1900 系統(偏移 25569)
  • LibreOffice Calc 透過設定同時支援 1899-12-30 和 1900-01-01 兩種起點
  • Power Query:Number.From(DateTime.FromText(...)) 返回自 1899-12-30 起的天數(1900 系統)
  • 在 Excel 的 .xlsx 內部,底層 XML 儲存 ISO 8601——Excel 在讀取時在序列號之間轉換

FAQ

如何把 Excel 序列日期轉換為 Unix 時間戳記?
減去 25,569(1899-12-30 與 1970-01-01 之間的天數),再乘以 86,400 得到 Unix 秒。
什麼是 OADate?
OLE 自動化日期是自 1899 年 12 月 30 日起的浮點天數,由 .NET(DateTime.ToOADate)和 COM 使用。對所有現代日期,它與 Excel 序列日期一致。
為什麼 Excel 偏移是 25569 而不是 25568?
Excel 的 1900 年閏年錯誤插入了一個虛假的 1900 年 2 月 29 日,使其後任意日期的計數加一天,從而使 25,569 成為現代日期的正確偏移。