Uvlio

Command Palette

Search for a command to run...

返回文章列表
技术文章

Unix 时间戳解释:秒、毫秒、UTC 与日志调试

时间戳看起来只是一个数字,但只有知道单位和参考点后才是有用日期。Unix 时间戳从 1970-01-01 00:00:00 UTC 开始计数。实践中最大的问题来自秒和毫秒混用、把 UTC 当本地时间显示却不说明,或比较来自不同系统假设的时间。
limitcool 维护的 Uvlio 编辑团队2026-05-177 分钟阅读
主题封面实用工具TimestampISO 8601

Unix 时间戳解释:秒、毫秒、UTC 与日志调试

解释 Unix 时间戳、单位混淆、UTC 显示、JavaScript 毫秒,以及如何阅读日志和 API 时间字段。

文章主题预览
1715846400
2026-05-16T00:00:00Z
compare local vs UTC
关联工具
时间戳转换
阅读重点
1理解原理
2检查边界
3使用工具

原创流程图

Unix 时间戳解释:秒、毫秒、UTC 与日志调试

这张图由 Uvlio 为本文工作流生成,用来说明从输入检查到输出判断的基本路径。
1

理解原理

检查后再进入下一步

2

检查边界

检查后再进入下一步

3

使用工具

检查后再进入下一步

维护与复核
维护者:limitcool。阅读时可重点关注技术原理、处理边界、隐私风险和可验证事实。
Epoch 是参考点

Unix time 计量从 1970 年开始经过的时间,基准是 UTC。时间戳不是带时区的字符串,而是一个计数。同一个时间戳在各地代表同一瞬间,但显示成不同本地时间。

秒和毫秒是最常见陷阱

很多 API 和数据库用秒,JavaScript Date 常用毫秒。混用会让日期偏离一千倍:秒被当毫秒会接近 1970,毫秒被当秒会跑到很远未来。当前秒级时间戳通常 10 位,毫秒级通常 13 位。

UTC 显示减少事故争论

调试时本地时间会制造混乱,因为每个人看到的显示可能不同。UTC 给团队共同参考。用户界面可以显示本地时间,但事故记录、日志、token claim、数据库比较和调度分析应包含 UTC 或明确时区。

Token 和日志里的时间戳有语义

JWT 的 exp、iat、nbf 通常用秒。日志平台可能同时保存事件时间、写入时间、处理时间和显示时间。Webhook 也可能区分事件发生和系统收到。比较时间时要先知道每个数字代表哪件事。

时钟偏差虽小但真实存在

分布式系统依赖大体同步但不完美的时钟。一个服务器签发的 token 在另一个服务器看来可能稍微来自未来。小容差合理,但不能用巨大容差掩盖秒毫秒混淆或时区错误。

人类可读日期可能丢精度

格式化日期可能省略秒、毫秒、时区或偏移。它更好读,但调试能力更弱。如果两个事件看似同一分钟发生,毫秒精度可能仍能说明顺序。无时区日期字符串也可能被另一个系统按本地时间解释。

时间戳检查清单

时间看起来不对时,先判断单位是秒、毫秒、微秒还是纳秒;转成 UTC;再转相关本地时区;确认该时间代表哪个事件;用同一单位和相邻事件比较;最后把预期单位写进 API 文档、数据库注释或类型名。

常见问题

为什么时间戳显示到 1970 年?

秒级时间戳可能被当成毫秒,或这个值其实是持续时间而非绝对时间。

API 应返回秒还是毫秒?

两者都可以,关键是命名和文档一致。

Unix 时间戳包含时区吗?

不包含。它表示一个瞬间,时区只影响显示。

日志时间线应该比较哪些字段?

分开比较事件时间、写入时间、处理时间和显示时间。

为什么时间戳字段名应包含单位?

created_at_ms 或 expires_at_seconds 这类命名能防止跨语言边界时猜错单位。

如何测试时间戳处理?

用一个已知秒值、一个已知毫秒值和一个靠近时区边界的日期,分别转 UTC 和本地时间。