Unix 时间戳转换教程:秒和毫秒、北京时间与 UTC
在接口返回、数据库字段和日志里,经常看到 1700000000 或 1700000000000 这样的一串数字,它就是 Unix 时间戳。人眼看不出是哪一天,用 时间戳转换 粘贴进去就能看到对应的日期时间,反过来也可以把日期转成时间戳。
时间戳是什么
Unix 时间戳表示从 1970 年 1 月 1 日 00:00:00 UTC 开始经过的秒数。它与时区无关:同一时刻,全世界的时间戳都相同,只是换算成当地时间时显示不同。
例如时间戳 1700000000:
- UTC 时间是 2023-11-14 22:13:20;
- 北京时间(UTC+8)是 2023-11-15 06:13:20。
秒还是毫秒
- 10 位数字:一般是秒,常见于 PHP、Python 的 int(time.time())、MySQL 的 UNIX_TIMESTAMP()、Linux 的 date +%s;
- 13 位数字:一般是毫秒,常见于 JavaScript 的 Date.now()、Java 的 System.currentTimeMillis()。
本站的转换工具会按位数自动识别。把毫秒当成秒去换算,会得到几万年后的日期;把秒当成毫秒,会得到 1970 年 1 月的日期,看到这两种结果就要检查单位。
操作步骤
- 打开工具:进入 时间戳转换,页面顶部会显示当前时间戳。
- 时间戳转日期:在“时间戳”框里粘贴数字,自动识别秒或毫秒,显示对应的本地时间和 UTC 时间。
- 日期转时间戳:在“日期时间”框里选择或输入日期时间,得到对应的时间戳。
- 核对时区:对照本地时间和 UTC 两个结果,确认数据期望的是哪一个时区。

⏱️ 时间戳转换
免费在线使用,文件和数据只在你的浏览器本地处理,无需注册。
为什么差了 8 小时
这是最常见的问题。时间戳本身没有时区,“差 8 小时”通常是因为:
- 程序把 UTC 时间直接当成北京时间显示,或者反过来;
- 数据库、服务器、应用三者的时区设置不一致;
- 用字符串保存时间时没有带时区信息。
建议在存储和传输时统一使用时间戳或带时区的 ISO 8601 格式(如 2026-10-31T12:00:00+08:00),只在显示给用户时转换成当地时间。
常用代码写法
| 语言 | 获取当前时间戳 | 时间戳转日期 |
|---|---|---|
| JavaScript | Date.now()(毫秒) | new Date(ms) |
| Python | int(time.time())(秒) | datetime.fromtimestamp(s) |
| MySQL | UNIX_TIMESTAMP() | FROM_UNIXTIME(s) |
| Linux | date +%s | date -d @1700000000 |
2038 年问题
用 32 位有符号整数保存秒级时间戳,最大只能表示到 2038-01-19 03:14:07 UTC,之后会溢出。新系统一般使用 64 位整数,不受影响;维护老系统、嵌入式设备时需要留意。
计算两个日期之间相差多少天,可以用 日期间隔计算。
常见问题
10 位和 13 位时间戳有什么区别?
10 位通常是以秒为单位,13 位通常是以毫秒为单位,13 位除以 1000 就是秒级时间戳。
时间戳转换后为什么差 8 小时?
时间戳对应的是 UTC 时间,北京时间是 UTC+8。程序把 UTC 当作本地时间显示或时区设置不一致时,就会出现 8 小时的差异。
时间戳会有负数吗?
会。1970 年 1 月 1 日之前的时间用负数表示,但部分系统和数据库不支持负的时间戳。
转换需要联网吗?
工具打开后在浏览器本地计算,不会上传你输入的内容。