NTP 转 Unix 时间戳转换器
把 NTP 转换为 Unix 时间。精确公式与大数支持。输出:秒、毫秒、ISO 8601 与可读格式。
自 1900-01-01 UTC 以来的秒数
当前时间 — NTP 时间戳—
Unix 时间戳(秒)—
什么是 NTP 时间戳?
网络时间协议(NTP)从 1900 年 1 月 1 日 00:00:00 UTC 起计时。经典的 64 位 NTP 时间戳分为 32 位的秒计数和 32 位的秒小数部分。本转换器处理整数秒字段(你最常需要转换的值)。
- 纪元:1900-01-01 00:00:00 UTC
- 格式:32 位秒 + 32 位秒小数(约 233 皮秒分辨率)
- 当前值约为 3.9 × 10^9
- 常见于:NTP/SNTP 数据包、RADIUS、某些日志和遥测格式
如何将 NTP 转换为 Unix 时间戳
1900 与 1970 之间相差 2,208,988,800 秒。从 NTP 秒字段中减去这个常量即可得到 Unix 秒。
- Unix seconds = NTP − 2208988800
- 示例:3908988800 → 1700000000 → 2023-11-14 22:13:20 UTC
- 反向:NTP = Unix seconds + 2208988800
- 32 位小数字段 ÷ 2^32 给出亚秒部分
NTP 纪元与 2036 翻转
32 位的秒字段大约每 136 年溢出一次。第一个 NTP 纪元在 2036 年 2 月 7 日结束,之后秒计数器回绕为零,必须单独跟踪一个「纪元号」。盲目地减去 2,208,988,800 仅在纪元 0 内有效;对于 2036 翻转之后的时间戳,必须每个纪元加上 2^32 秒。对于今天的日期,简单的减法是正确的。
- 纪元 0 涵盖 1900 至 2036-02-07
- 翻转之后,在减去偏移之前加上 4294967296 × eraNumber
- NTP 时间戳是 UTC,且不在秒字段中编码闰秒
相关时间戳格式转换器
相邻的时间协议
NTP 最常见,但其周边生态还包括:
- SNTP:简单 NTP,相同的线缆格式,精度较低且无时钟纪律
- PTP(IEEE 1588):用于金融和广播的纳秒级精度协议——线缆格式不同,但纪元概念相似
- Stratum 0 硬件(原子钟、GPS 接收机)为 Stratum 1 服务器提供时间源,后者再服务客户端
- NTP 时间戳嵌入在 RADIUS Accounting(Event-Timestamp)和许多 IPsec 实现等协议中
- 对于 UTC 闰秒处理,NTP 使用 leap indicator 字段中的位标志;秒字段本身不跳变
FAQ
- 什么是 NTP 纪元?
- NTP 计数自 1900 年 1 月 1 日 00:00:00 UTC 起的秒数。
- 如何把 NTP 时间转换为 Unix 时间?
- 从 NTP 秒值中减去 2,208,988,800 秒,即可得到一个 Unix 时间戳。
- 2036 年 NTP 会发生什么?
- 32 位秒计数器会在 2036 年 2 月 7 日溢出并归零,开启 NTP 纪元 1。转换器必须跟踪纪元编号,才能正确解释之后的时间戳。