时间戳 10 位和 13 位差在哪?秒、毫秒与 UTC 对齐一次讲清
排查线上问题时,日志里躺着 1735689600,前端同事发来的是 1735689600000,两个人说的明明是同一时刻,数字却差了三个零。再往下查,有人转出来是 2025 年 1 月 1 日 00:00,有人转出来是当天 08:00。单位差三倍和时区差八小时,是时间戳问题里最常撞上的两件事。
一、先分清「单位」和「时区」这两件事
Unix 时间戳记的是从 1970-01-01 00:00:00 UTC 起经过的时间,本身不带时区。它只是一个数字,全球通用。
单位上常见的两种:
| 位数 | 单位 | 常见来源 |
|---|---|---|
| 10 位 | 秒 | Linux 日志、MySQL UNIX_TIMESTAMP()、多数后端语言 |
| 13 位 | 毫秒 | JavaScript Date.now()、Java System.currentTimeMillis() |
把 13 位的毫秒值当成秒喂给期望秒的接口,会得到一个公元 5 万多年的日期;反过来,把 10 位当毫秒,会落到 1970 年 1 月。所以看到「转换结果明显不合理」,第一反应应该是查位数,而不是怀疑数据源坏了。
时区是另一回事:同一个时间戳,在 UTC 是 00:00,在北京时间(UTC+8)就是 08:00。两个结果都对,差的是展示用的时区。排查跨时区 bug 时,务必让双方先说清楚用的是哪个时区,否则很容易把「显示差异」当成「数据错了」。
二、紧凑写法和 ISO 8601 也容易看错
除了纯数字,还常遇到这几种:
20250101这种 8 位数字,是yyyyMMdd紧凑日期;20250101000000这种 14 位,是yyyyMMddHHmmss;2025-01-01T00:00:00Z末尾的Z表示 UTC,等价于+00:00;2025-01-01T08:00:00+08:00带偏移,与上面那个Z是同一时刻。
注意带 Z 的字符串和不带时区的字符串不是一回事。不带时区的 2025-01-01 00:00:00 会被按本地时区解释,这往往是「本地跑正常、上服务器差 8 小时」的根源。
三、什么时候一定要看「接下来是什么时间」
有两类场景,光转出一个日期不够:
- 定时任务。cron 或调度平台给的是秒级表达式,但业务方说的是「每天北京时间上午 9 点」,中间隔着一层时区换算;
- 夏令时。欧美时区一年里偏移会变,按固定 +8 或 -5 硬算,跨过切换日就错一小时。
这时需要的是同一时刻在多个时区下的并列对照,以及夏令时自动换算,而不是手算。
四、把这些换算放到一个页面里做
本地工具箱的时间戳转换 覆盖了上面这些输入:自动识别秒级/毫秒级时间戳与日期时间,8 位 yyyyMMdd、14 位 yyyyMMddHHmmss 紧凑数字也能识别;结果同时给出本地时间、UTC、ISO 8601、星期、时间戳和相对时间,支持逐行与整表复制。
几个细节在实际排障时挺省事:
- 不用手动切「秒/毫秒」,位数自动判断,少一次误操作;
- 本地、UTC、ISO 三种结果并排显示,一眼能看出差的是 8 小时还是别的;
- 相对时间(如「3 天前」)对看日志很有用,不用再心算;
- 整表复制可以直接贴进工单或群聊里说明;
- 计算在浏览器本地完成,日志内容不上传服务器。
同一站还有几个相关页面:日期格式化 支持自定义模板与本地/UTC 切换;日期相差计算 给出天时分秒、自然日、工作日与总时长;日期加减 按年月日周时分秒加减并回传时间戳;时区转换 并列展示全球常用时区的当地时间,夏令时自动换算,下方世界地图还能点任意位置看对应时区。
五、实操:把一条线上时间戳查清楚
- 打开 时间戳转换,把日志里的
1735689600粘进输入框,不用选单位。 - 对照结果里的本地时间与 UTC 两行:如果差 8 小时,说明数据源给的是 UTC 时刻,展示层按北京时间解读,两边都没错。
- 把 ISO 8601 那一行复制进工单,写明这是 UTC 还是本地时间,避免后面继续扯皮。
- 如果对方给的是
1735689600000,直接粘进去,看它是否落在同一时刻;这一步能快速确认双方说的是不是同一件事。 - 涉及海外用户,打开 时区转换,选好基准时间,看目标时区当天是几点,注意夏令时切换日。
- 要算「距离故障发生过了多久」,把两个时间放进 日期相差计算,拿工作日和总时长两个口径分别报。
第 3 步看着啰嗦,但跨团队排障时,一句「以下均为 UTC+8」比反复解释数值有用得多。
常见问题
问:13 位一定是毫秒吗? 常见来源里基本是。个别系统会用微秒(16 位)或纳秒(19 位),遇到超出 13 位的数字先确认来源精度,别直接当毫秒换算。
问:为什么同一个时间戳,两个网站显示差 8 小时? 大概率是一个按 UTC、一个按本地时区显示。看结果里有没有标时区,或者有没有同时给出 UTC 值。
问:转换要注册吗?数据会上传吗? 不用注册,时间戳转换在浏览器本地计算,输入不上传。站点里只有明确标注「需上传」的 AI 类付费功能才会把内容提交到后端。
问:手机上能查吗? 页面响应式布局,手机上工具面板自动变上下两栏;每个工具有独立地址,可以把时间戳转换页单独收藏。
小结
位数管单位,时区管展示,两件事分开看,绝大多数时间戳疑问就解了。下次再遇到「同一时刻两个数字对不上」,先数位数、再看时区标注,然后打开 时间戳转换 把本地、UTC、ISO 三行一起复制给对方——不用注册,打开即用。