NTP Timestamp

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。转换器必须跟踪纪元编号,才能正确解释之后的时间戳。