主题
时间戳转换
日志里一串 1788609600,你想知道是什么时候。或者要给接口传一个「明天零点」的时间戳。

打开「时间戳转换」看到的初始界面。在浏览器本地完成、数据不离开浏览器,免费。
先数位数
拿到一串数字,第一件事是数位数——这决定了单位:
| 位数 | 单位 | 谁在用 |
|---|---|---|
| 10 位 | 秒 | Unix 标准,多数后端、数据库 |
| 13 位 | 毫秒 | JavaScript 的 Date.now()、Java 的 currentTimeMillis() |
| 16 位 | 微秒 | 部分数据库、链路追踪 |
| 19 位 | 纳秒 | Go 的 time.Now().UnixNano() |
弄错单位的症状很好认:日期跑到 1970 年(把秒当毫秒),或者跑到公元五万年(把毫秒当秒)。
时间戳本身不含时区
这是理解所有时间戳问题的前提。
Unix 时间戳是「从 1970-01-01 00:00:00 UTC 起的秒数」,全世界同一时刻的时间戳完全相同。没有「北京时间的时间戳」这种东西。
时区只在两个地方起作用:把时间戳显示成人能读的日期时,以及把人写的日期解析成时间戳时。所以工具会同时显示 UTC 和本地时间——绝大多数时间戳纠纷,看一眼这两个数就能定位在哪一端出的问题。
差 8 小时的排查顺序
如果偏差恰好是 8 小时的整数倍,几乎必然是时区问题,不用怀疑数据本身。中国全境统一 UTC+8 且没有夏令时,所以偏差总是整 8 小时,不会出现 7 或 9 小时这种夏令时特有的情况。
排查:先确认这个时间戳对应的 UTC 时间 → 再确认它应该按哪个时区显示 → 最后看代码里格式化函数用的是哪个时区。
完整说明:时间戳换算出来差了 8 小时,问题出在哪
显示成 1970 年的另一种原因
如果时间戳是 0 或空值,格式化出来就是 1970-01-01。这通常意味着上游没赋值,而不是时间算错了。
看到一批数据整齐地显示 1970-01-01 08:00:00(注意那个 08:00:00,正是 UTC 0 点按东八区显示的结果),基本可以判定是字段没填。
浏览器本地处理
不上传服务器。
相关工具
- 时间戳的三个坑 —— 完整排查指南
- Cron 表达式解析 —— 定时任务的时间计算
- 日期计算器 —— 工作日、日期推算