Unix 时间戳完全指南:转换、精度与时区
做后端接口调试、数据库查询、日志分析,几乎绕不开一串 10 位或 13 位的数字——Unix 时间戳。它到底代表什么?为什么从 1970 年开始?秒级和毫秒级怎么区分?时区又有什么关系?本文一次性讲清楚,并附上一个开源的在线转换工具。
👉 在线体验:https://www.stark1898y.cc/dev-tools/timestamp-converter/
一、什么是 Unix 时间戳?为什么要从 1970 年开始?
Unix 时间戳(Unix Timestamp / Epoch Time)是一个整数,表示从 1970 年 1 月 1 日 00:00:00 UTC 至今所经过的秒数(或毫秒数)。它是计算机系统存储和传递时间的通用标准——你在数据库字段、REST API 响应、日志文件、JWT Token(iat/exp)、Redis 过期时间里随处可见它的身影。
1970 年被选为起点,是因为 Unix 操作系统正是在那个年代诞生的,开发者将其定为「计算机纪元」(Epoch)的起始日。时间戳的核心优势在于:它是与时区无关的绝对时间,全球任何地方在同一时刻的时间戳数值完全相同,因此非常适合跨系统、跨时区的时间存储与比较,也不受夏令时影响。
面对这串数字,人类几乎无法直接读出它对应的日期,这正是时间戳转换工具的价值所在。
二、秒级 vs 毫秒级:如何快速判断时间戳精度
Unix 时间戳有两种常见精度,掌握位数规律即可一眼判断:
| 精度 | 位数 | 示例 | 常见来源 |
|---|---|---|---|
| 秒级 | 10 位 | 1780713460 | Go、Python、PHP |
| 毫秒级 | 13 位 | 1780713460000 | JavaScript、Java |
- 秒级(10 位):精确到秒。Go、Python、PHP 等语言默认返回秒级。
- 毫秒级(13 位):精确到毫秒。JavaScript
Date.now()、JavaSystem.currentTimeMillis()默认返回毫秒。
转换工具通常会自动识别精度:10 位按秒处理,13 位按毫秒处理,粘贴即转,无需手动切换。
各语言获取当前时间戳速查
| 语言 | 秒级 | 毫秒级 |
|---|---|---|
| JavaScript | Math.floor(Date.now() / 1000) | Date.now() |
| Python | int(time.time()) | int(time.time() * 1000) |
| Java | System.currentTimeMillis() / 1000 | System.currentTimeMillis() |
| Go | time.Now().Unix() | time.Now().UnixMilli() |
| PHP | time() | round(microtime(true) * 1000) |
| C | time(NULL) | — |
| SQL | UNIX_TIMESTAMP() | UNIX_TIMESTAMP() * 1000 |
三、时间戳与时区:为什么同一时间戳在不同地方显示不同日期?
Unix 时间戳代表一个全球统一的绝对时刻(UTC)。将其转换为「本地日期时间」时,需要叠加目标时区的偏移量。
以时间戳 0 为例:
| 时区 | 显示时间 |
|---|---|
| UTC (UTC+0) | 1970-01-01 00:00:00 |
| 北京/上海 (UTC+8) | 1970-01-01 08:00:00 |
| 东京 (UTC+9) | 1970-01-01 09:00:00 |
| 纽约 (UTC-5) | 1969-12-31 19:00:00(注意日期变了) |
时区不影响时间戳本身的数值,只影响展示格式。这就是为什么跨时区排查问题时要格外小心:同一条日志的时间戳,在北京和纽约显示出来的「日期」可能不同。
四、时间戳转换的 5 个高频使用场景
① 调试 API 响应
后端返回 {"created_at": 1780713509, "expires_at": 1780799909}——这两个时间点分别是什么?粘贴到时间戳转换工具,立刻看到可读日期,快速确认逻辑是否正确。
② 解读 JWT Token 的过期时间
JWT Payload 中的 iat(签发时间)和 exp(过期时间)都是 Unix 秒级时间戳。将 exp 粘贴到转换工具,即可知道 token 何时过期,无需心算。
③ 构造数据库时间范围查询
需要查询昨天 00:00 到今天 00:00 之间的记录?把日期填入「日期 → 时间戳」,得到对应的秒级时间戳,直接写进 SQL:WHERE created_at BETWEEN 1780627200 AND 1780713600。
④ 分析日志文件中的时间戳
服务器日志、监控告警、Nginx access log 中常见时间戳字段。批量粘贴到「批量转换」区,一次输出所有可读时间,快速定位问题区间。
⑤ 跨时区的时间换算
北京时间 2026-06-06 18:00 开始的直播,对应纽约时间几点?先把北京时间转成时间戳,再切换时区到纽约(UTC-5),即可得到精确的当地时间。
五、日期时间转时间戳:支持哪些输入格式?
常见的日期字符串格式都能解析,例如:
| 格式 | 示例 | 说明 |
|---|---|---|
| 仅日期 | 2026-06-06 | 时分秒默认为 00:00:00 |
| 日期 + 时间 | 2026-06-06 10:38:29 | 空格分隔 |
| ISO 8601 | 2026-06-06T10:38:29 | 标准格式 |
| 带 UTC 标记 | 2026-06-06T02:38:29Z | Z 表示 UTC |
| 带时区偏移 | 2026-06-06T10:38:29+08:00 | 按偏移换算 |
建议优先使用
YYYY-MM-DD HH:mm:ss格式,清晰易读,兼容性最好。
六、开源工具介绍
Timestamp-Converter 时间戳转换器 是一个零依赖的单文件纯前端工具,主要特性:
- 双向转换:时间戳 → 日期时间 / 日期时间 → 时间戳
- 精度自动识别:10 位秒级、13 位毫秒级,粘贴即转
- 38 个常用时区:按城市或 UTC 偏移搜索(shanghai、+8 等)
- 多格式输出:ISO 8601、RFC 2822、UTC、MySQL DATETIME 等
- 相对时间:自动显示「3 小时前」「61 天后」
- 批量转换:多行时间戳/日期一次转换
- 完全本地处理:数据不出浏览器,可离线使用,支持深色模式
开源地址:GitHub
七、小结
- 时间戳是从 1970-01-01 00:00:00 UTC 起的秒数/毫秒数,与时区无关的绝对时间
- 10 位是秒级,13 位是毫秒级,转换工具会自动识别
- 显示本地时间时按所选时区叠加偏移,跨时区注意日期可能变化
- 用转换工具批量处理 API、日志、数据库中的时间戳,效率最高