Unix时间戳转换器

时间戳与日期时间双向转换,支持秒和毫秒切换,同时显示 UTC 与本地时间。

Unix时间戳转换器怎么用

不需要注册或登录:选好城市、时区或时间戳,对应的时刻会即时显示,可切换 12 与 24 小时制。

计算在你的浏览器本地完成,输入的内容不会上传。下方说明了时区与夏令时的规则、时间戳的秒与毫秒之别,以及跨时区排会议时容易忽略的几点。

Unix 时间戳是从 1970 年 1 月 1 日 00:00:00 UTC 起算的秒数,不带时区、方便比较和存储,被日志、数据库和接口广泛使用。这个工具支持时间戳与日期时间双向转换、秒/毫秒切换,并同时显示 UTC 与本地时间。用之前先记住一件事:10 位是秒,13 位是毫秒,差 1000 倍。

时间戳从 1970-01-01 00:00:00 UTC 起算

Unix 时间戳(Unix timestamp)的定义很直接:从 1970 年 1 月 1 日 00:00:00 UTC 这个时刻开始,到现在经过的秒数,这个起点被称为"Unix 纪元"(epoch)。比如时间戳 0 对应 1970-01-01 00:00:00 UTC,换算成北京时间是 1970-01-01 08:00:00;时间戳 1000000000 对应 2001-09-09 01:46:40 UTC,北京时间则是 2001-09-09 09:46:40。有一点容易被忽略:Unix 时间戳不计算闰秒。UTC 至今已插入过 27 个闰秒,但系统时间靠"每天固定 86400 秒"来算,闰秒被摊平或忽略,所以时间戳与物理上"实际流逝的秒数"会有细微出入,日常使用无感。

10 位是秒、13 位是毫秒:接口调试最常踩的坑

同一个时间点,用秒记是 10 位数,用毫秒记是 13 位数,两者相差 1000 倍——这是接口联调里最高频的错误。判断方法很实用:数位数。10 位(如 1700000000)是秒,13 位(如 1700000000000)是毫秒。现在(2020 年代)的秒级时间戳都是 10 位,要到公元 2286 年才会涨到 11 位;毫秒级则是 13 位,要到 2286 年才变 14 位。典型的坑是:前端 JavaScript 传了毫秒给只认秒的后端,结果时间直接跳到几万年以后;或者把秒当毫秒处理,日期退回到 1970 年 1 月。本工具支持秒/毫秒一键切换,输入时先确认自己拿到的是哪一种。

2038 年问题:32 位整数在 03:14:07 溢出

如果时间戳用 32 位有符号整数存储,它能表示的最大值是 2,147,483,647。把这个数换算成时间,就是 2038 年 1 月 19 日 03:14:07 UTC(北京时间同日 11:14:07)。再往后加一秒,整数就会溢出、翻成负数,日期直接跳回 1901 年——这就是"2038 年问题"(Year 2038 problem)。受影响的主要是仍用 32 位 time_t 的老系统、老数据库和嵌入式设备。现代系统大多已改用 64 位存储时间戳,理论上可表示到约 2920 亿年后,实际不会再遇到这个问题。但如果你的项目还在维护老代码,值得提前排查。

为什么日志、数据库、接口都爱存时间戳

时间戳被广泛采用,核心原因是它"与时区无关"。同一个时刻,北京时间写"2026-09-30 12:00"、纽约写"2026-09-29 23:00",字符串形式在不同系统间传递很容易因为时区理解不一致而错乱;而时间戳是一个纯数字,全世界指向同一个瞬间,谁都不会读错。其次,它是一个整数,可以像数字一样直接比较大小、排序、做减法算时间差,不需要解析日期格式。第三,它占用的存储小(64 位整数 8 字节,远小于 ISO 8601 字符串),索引和查询也更快。日志按时间排序、数据库存创建时间、接口传时间参数,几乎都用时间戳,就是这三点决定的。

JavaScript 的 Date.now() 返回的是毫秒

这是前后端协作里最容易出错的一处:JavaScript 的 Date.now() 返回的是毫秒级时间戳(13 位),而很多后端语言(Python、PHP、Go 的 Unix() 等)默认处理秒级时间戳(10 位)。所以前端把 Date.now() 的结果直接发给后端,对方若不除以 1000 就会把时间算到几万年后;反过来,后端返回 10 位秒级时间戳,前端直接 new Date(1700000000) 会得到 1970 年 1 月 20 日,而不是你以为的 2023 年 11 月。正确做法是:拿到秒就乘 1000 再传给 new Date(),拿到毫秒就除以 1000 再给后端。写接口时在文档里明确标注单位是"秒"还是"毫秒",能省掉大量联调时间。

UTC+8:同一个时间戳,北京比伦敦早 8 小时

时间戳本身不带时区,显示成什么时间,取决于你用哪个时区去换算。中国大陆统一使用东八区(UTC+8),也就是比 UTC 早 8 小时,换算偏移量是 28800 秒。所以时间戳 0 在 UTC 下是 1970-01-01 00:00:00,在北京时间下就是 1970-01-01 08:00:00。再看时间戳 1700000000:UTC 是 2023-11-14 22:13:20,北京时间是 2023-11-15 06:13:20。做跨境业务、看服务器日志时尤其要注意——很多服务器记录的是 UTC,直接当成本地时间读会差 8 小时。本工具同时显示 UTC 与本地时间,两边对照就不容易读错。

参考资料

常见问题

Unix 时间戳是什么?

从 1970-01-01 00:00:00 UTC 起算、到某个时刻经过的秒数,不含闰秒。它是个与时区无关的整数,全球指向同一瞬间。

10 位和 13 位时间戳有什么区别?

10 位是秒级,13 位是毫秒级,相差 1000 倍。现在的秒级时间戳都是 10 位(到 2286 年才变 11 位),毫秒级是 13 位。联调时先数位数,能避免时间跳到几万年后。

时间戳 0 对应什么时间?
1970-01-01 00:00:00 UTC,也就是 Unix 纪元起点。换算成北京时间(UTC+8)是 1970-01-01 08:00:00。
2038 年问题是什么?
32 位有符号整数最大是 2,147,483,647,对应 2038-01-19 03:14:07 UTC。超过这个时刻,32 位时间戳会溢出成负数,日期跳回 1901 年。现代 64 位系统不受影响。
为什么 JavaScript 里的时间戳是 13 位?
因为 Date.now() 返回的是毫秒。传给按秒处理的后端前要除以 1000,反过来把后端的秒级时间戳传给 new Date() 前要乘以 1000。

本工具在你的浏览器本地运行,输入的数据不会上传服务器 · 最后更新:2026-10-04

内容与数据的核对流程见 内容产生与纠错机制,计算依据见 数据来源与核对流程。