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 成为现代日期的正确偏移。