第 2 课

秒与毫秒

十位与十三位数值的区别,以及如何避免差 1000 倍的错误。

Unix 时间的 定义单位是秒,但许多运行环境用 毫秒 提供更高精度。二者混用是最常见的时间戳错误之一。

位数启发式

十进制大致规律:

位数通常含义示例
101700000000
13毫秒1700000000000

其它位数需结合上下文——务必对照 API 文档。

为何两种都有

  • ——紧凑;Python time.time()、Linux date +%s、许多 JWT 过期时间
  • 毫秒——JavaScript Date.now()、Java System.currentTimeMillis()、部分需要亚秒排序的 JSON API

换算就是乘除 1000——方向搞反时,日期会跳到 1970 年或遥远未来。

小数秒

有的系统返回 浮点秒1700000000.123),仍是「秒 + 小数部分」,不是毫秒。当成整数毫秒会丢精度或校验失败。

防御习惯

  1. 先看 API schema 或样例载荷
  2. 若日期差约 1000 倍,先怀疑单位
  3. 应用内部统一一种 convention(常用 ms),在边界再转换
  4. 数据库优先用 TIMESTAMPTZ 等类型,而非裸整数

要点

秒与毫秒是同一时间线的不同刻度。 转换或比较前先确认数据源用的哪一种。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览