766113 工具箱
Time

时间戳转换时最容易踩的时区问题

时间戳看似简单,实际排查中却经常因为秒、毫秒和时区混用导致误判。

Unix 时间戳通常表示从 1970-01-01 00:00:00 UTC 开始经过的秒数。JavaScript 的 Date.now() 返回毫秒,很多数据库和日志平台又可能混用秒级和毫秒级字段。判断方式很简单:10 位数字大多是秒级,13 位数字大多是毫秒级。

第二个问题是 UTC 与本地时间。服务器日志常用 UTC,用户界面常展示本地时区。如果你在香港时间 10:00 看到一条 UTC 02:00 的日志,它们可能是同一时刻,而不是延迟 8 小时。

第三个问题是夏令时。跨地区系统如果只保存本地时间字符串,到了夏令时切换日就可能出现不存在的时间或重复的时间。排查定时任务和账单周期时,最好同时记录原始时间戳、时区和展示格式。

快速检查

  1. 确认数字是秒还是毫秒。
  2. 同时转换成 UTC 和本地时区。
  3. 检查日志来源机器的系统时区。
  4. 排查定时任务时确认 Cron 使用的是哪个时区。