NTP 时间戳是从 1900-01-01T00:00:00Z 起算的秒数。它的源纪元和单位必须跟着一起走——光看数字,你没法知道它属于哪块钟。
换算公式
Unix 秒 = NTP 秒 − 2208988800
转换器按这个关系给出 Unix 秒、epoch 毫秒、ISO 8601 UTC 和可读的 UTC 值。排查日志或导出数据时,请把原始值也留着,方便日后复核换算是否正确。
容易出错的地方
32 位的 NTP 秒字段会按 era 回绕。碰到有歧义的值,得靠上下文判断它属于哪一轮。
更稳妥的做法
- 动手算之前,先确认平台和字段名。
- 数值可能超出 JavaScript 安全整数范围时,用字符串保留原始值。
- 在边界上一次性转换完,之后只存储和比较单位明确的 Unix 值。
- 只有在把结果呈现给人看时,才用具名时区做格式化。
相关格式转换器
Frequent questions:
- Q: NTP 的纪元是什么?
- A: NTP 从 1900 年 1 月 1 日 00:00:00 UTC 开始计秒。
- Q: 怎么把 NTP 时间转成 Unix 时间?
- A: 用 NTP 秒值减去 2,208,988,800 秒,就得到 Unix 时间戳。
- Q: 2036 年 NTP 会怎么样?
- A: 32 位的秒计数器会在 2036 年 2 月 7 日溢出并归零,进入 NTP era 1。之后的时间戳,转换器必须同时跟踪 era 编号才能正确解读。