Unix 时间戳完全指南:秒与毫秒、时区与 2038 年问题
WebTool 团队 · 发布于 2026-09-04 · 时间戳 / Unix / 后端
Unix 时间戳是从 1970-01-01 00:00:00 UTC(纪元时间)起经过的秒数,本身与时区无关——同一时刻全世界的时间戳完全相同。 需要互转可以用本站时间戳工具,支持秒/毫秒自动识别与时区切换。
秒与毫秒怎么区分
看位数:当前时代的秒级时间戳是 10 位(如 1700000000),毫秒级是 13 位(如 1700000000000)。一个快速判断:10 位及以下按秒,11 位以上按毫秒。
| 场景 | 常见单位 |
|---|---|
| Unix/Linux 系统、大多数后端 API | 秒 |
JavaScript Date.now()、Java System.currentTimeMillis() |
毫秒 |
混用是线上事故高发区:把毫秒当秒用,时间会偏到 5 万年后。
时区的本质
时间戳没有时区,时区只在"格式化展示"这一步起作用。1700000000 在北京显示为 2023-11-15 06:13:20,在 UTC 显示为 2023-11-14 22:13:20——是同一个瞬间。排查"时间差了 8 小时"问题,先确认是存储错了还是展示时区错了。
2038 年问题
32 位有符号整数存储的秒级时间戳,将在 2038-01-19 03:14:07 UTC 溢出回绕到 1901 年。现代 64 位系统已不受影响,但嵌入式设备、旧数据库 schema(如 MySQL 的 TIMESTAMP 类型只到 2038)仍需注意——新设计请用 BIGINT 或 DATETIME。
各语言获取当前时间戳
| 语言 | 秒 | 毫秒 |
|---|---|---|
| JavaScript | Math.floor(Date.now()/1000) |
Date.now() |
| Python | int(time.time()) |
int(time.time()*1000) |
| Go | time.Now().Unix() |
time.Now().UnixMilli() |
| Java | Instant.now().getEpochSecond() |
System.currentTimeMillis() |
| SQL(MySQL) | UNIX_TIMESTAMP() |
UNIX_TIMESTAMP(NOW(3))*1000 |
最后更新:2026-09-04