Unix 时间戳是什么?10 位和 13 位有什么区别
Unix 时间戳是自 1970-01-01 00:00:00 UTC 起的秒数。讲清 10 位秒级与 13 位毫秒级的区别、时区换算与 2038 问题。
一、一句话定义
Unix 时间戳 = 从 1970-01-01 00:00:00 UTC(纪元元年)开始累计的秒数。它是与地区无关的绝对时间:北京时间 2024-01-01 08:00:00 与 UTC 2024-01-01 00:00:00 是同一个时间戳 1704067200。
二、10 位与 13 位:秒 vs 毫秒
常见的两种长度:
- 10 位:秒级时间戳,Linux/MySQL/后端语言的标准。
- 13 位:毫秒级,JavaScript
Date.now()、JavaSystem.currentTimeMillis()的返回值。
看到 13 位不要慌,除以 1000 再转即可。反过来,10 位时间戳乘 1000 才能被 JS 的 Date 正确解析。
三、时区只是显示问题
时间戳本身没有时区,时区只发生在「显示」环节:
- 同一个时间戳 1704067200,UTC 显示 00:00,北京(+8)显示 08:00,纽约(-5)显示前一天 19:00。
- 服务器存时间戳、前端按用户本地时区渲染,是国际化应用的标准做法。
四、2038 问题
32 位有符号整数最大值对应 2038-01-19 03:14:07 UTC,之后溢出变负数。现代 64 位系统的时间戳是 64 位整数,几千年内不会溢出;但老式嵌入式设备、老系统仍是隐患,升级时要注意。
在线体验
不用装任何环境,直接用本站时间戳转换工具在线操作,数据都在浏览器本地处理,方便又安全。
常见问题
时间戳能为负数吗?
可以。1970 年之前的时间用负数表示,例如 1969-12-31 23:59:59 UTC 是 -1。部分系统不支持负时间戳,处理历史数据时要留意。
为什么我的时间戳转换差了 8 小时?
时区没对齐。转换时先确认:时间戳按 UTC 解释,而你在按北京时间读结果(或相反)。统一约定后再转即可。
毫秒时间戳怎么转成秒?
去掉最后 3 位(整除 1000)即可。13 位毫秒变 10 位秒;反向则乘 1000 补 3 个 0。
