时间戳转换器
在 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 日。