第 5 课

常见时间戳陷阱

Y2038、小数秒、单位混淆与歧义日期字符串。

时间格式看似简单,却总在固定模式上翻车。认出模式能省大量排查时间。

Y2038 与整数上限

传统 32 位有符号 time_t 约在 2038-01-19 溢出。老旧嵌入式或二进制仍可能用 32 位秒。现代 64 位服务端存储多半安全,但导出 CSV 或旧客户端未必。

JavaScript Date 用毫秒双精度——范围极大,但 超大整数 传入解析器仍可能失败。

差 1000 倍(秒 vs 毫秒)

现象:

  • 日期靠近 1970-01-01 → 把秒当成了毫秒(数值过小)
  • 日期在 50000 年 附近 → 把毫秒当成了秒

先问:「文档说这条字段是 sec 还是 ms?」

歧义本地字符串

无 timezone 的 2024-06-01 00:30 在东京与多伦多不是同一瞬间。按「服务器本地」「用户本地」还是 UTC 解析,bug 表现完全不同。

夏令时空洞与重复

DST 切换日,本地墙钟可能跳过或重复。在「回拨」日安排「本地 2:30 AM」可能无效或歧义。闹钟、计费应用应存 UTC 瞬间。

locale 日期陷阱

03/04/2024 在美国是 3 月 4 日,在欧洲可能是 4 月 3 日。机器可读字段优先 ISO 2024-03-04

要点

多数时间戳 bug 来自 单位混淆缺少时区遗留位宽限制——不是高深的数学。先查这三项。

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

打开相关工具

返回课程概览