第 2 课
秒与毫秒
十位与十三位数值的区别,以及如何避免差 1000 倍的错误。
Unix 时间的 定义单位是秒,但许多运行环境用 毫秒 提供更高精度。二者混用是最常见的时间戳错误之一。
位数启发式
十进制大致规律:
| 位数 | 通常含义 | 示例 |
|---|---|---|
| 10 | 秒 | 1700000000 |
| 13 | 毫秒 | 1700000000000 |
其它位数需结合上下文——务必对照 API 文档。
为何两种都有
- 秒——紧凑;Python
time.time()、Linuxdate +%s、许多 JWT 过期时间 - 毫秒——JavaScript
Date.now()、JavaSystem.currentTimeMillis()、部分需要亚秒排序的 JSON API
换算就是乘除 1000——方向搞反时,日期会跳到 1970 年或遥远未来。
小数秒
有的系统返回 浮点秒(1700000000.123),仍是「秒 + 小数部分」,不是毫秒。当成整数毫秒会丢精度或校验失败。
防御习惯
- 先看 API schema 或样例载荷
- 若日期差约 1000 倍,先怀疑单位
- 应用内部统一一种 convention(常用 ms),在边界再转换
- 数据库优先用
TIMESTAMPTZ等类型,而非裸整数
要点
秒与毫秒是同一时间线的不同刻度。 转换或比较前先确认数据源用的哪一种。