什么是 Unix 时间戳
Unix 时间戳(Unix Timestamp / Epoch Time)是从 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。它是一个整数,例如:
1700000000→ 2023-11-14 22:13:20 UTC1700000000000→ 同一时刻(但以毫秒为单位)
时间戳是编程中最常用的时间表示方式,因为它是时区无关的纯数字,便于存储、比较和计算。
为什么需要时间戳转换
- 调试 API:后端返回的时间戳需要转换为可读格式才能理解
- 日志分析:系统日志中的时间戳需要转换为本地时间
- 数据库查询:SQL 中的时间戳字段需要转换为日期
- 跨时区协作:时间戳是统一的时间基准,避免时区混淆
如何使用在线时间戳转换器
使用 DevToolkit Pro 的 时间戳转换器:
- 时间戳 → 日期:粘贴时间戳数字,工具自动识别秒/毫秒/微秒
- 日期 → 时间戳:选择或输入日期时间,一键生成时间戳
- 自动识别:粘贴任意时间戳,工具自动判断单位(s/ms/μs)
时间戳单位详解
| 单位 | 位数 | 示例 | 常见场景 |
|------|------|------|---------|
| 秒(s) | 10位 | 1700000000 | Unix/Linux, SQL, Redis |
| 毫秒(ms) | 13位 | 1700000000000 | JavaScript, Java, Go |
| 微秒(μs) | 16位 | 1700000000000000 | MySQL, 高精度计时 |
自动识别技巧
看时间戳的位数可以快速判断单位:
- 10 位数字 → 秒(如
1700000000) - 13 位数字 → 毫秒(如
1700000000000) - 16 位数字 → 微秒(如
1700000000000000)
编程语言中的时间戳
JavaScript / TypeScript
// 当前时间戳(毫秒)
const ms = Date.now(); // 1700000000000
// 当前时间戳(秒)
const s = Math.floor(Date.now() / 1000); // 1700000000
// 毫秒 → Date 对象
const date = new Date(1700000000000);
// Date → 毫秒
const timestamp = date.getTime();
Python
import time
from datetime import datetime
# 当前时间戳(秒)
timestamp = int(time.time())
# 时间戳 → datetime
dt = datetime.fromtimestamp(1700000000)
# datetime → 时间戳
timestamp = int(dt.timestamp())
Go
import "time"
// 当前时间戳(秒)
timestamp := time.Now().Unix()
// 时间戳 → Time
t := time.Unix(1700000000, 0)
常见时间戳陷阱
毫秒 vs 秒混淆
最常见的错误。JavaScript 的 Date.now() 返回毫秒,而 Unix 标准是秒。如果把毫秒当秒传给 new Date(),会得到一个遥远未来的日期。
时区问题
时间戳本身是 UTC 的,但 new Date().toLocaleString() 会使用本地时区。在跨时区协作时,始终以 UTC 为基准。
2038 年问题
32 位有符号整数的最大值为 2147483647,对应 2038 年 1 月 19 日。届时 32 位 Unix 时间戳将溢出。现代系统已迁移到 64 位时间戳,但嵌入式系统和旧数据库仍需注意。
FAQ
时间戳是时区无关的吗?
是的。Unix 时间戳是 UTC 时间的秒数,不涉及时区。同一时间戳在任何时区都表示同一时刻。只有在转换为可读日期时才需要考虑时区。
JavaScript 的 Date.now() 返回什么单位?
毫秒(ms)。这是新手最常犯的错误——将 13 位毫秒时间戳当作 10 位秒级时间戳使用。
如何获取当前时间戳?
在浏览器控制台输入 Date.now()(毫秒)或 Math.floor(Date.now()/1000)(秒)。也可以使用 DevToolkit Pro 的在线工具一键获取。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。