理解 Unix 时间戳:开发者完整指南
2026-05-20 · Development
什么是 Unix 时间戳?
Unix 时间戳是一种以累计秒数跟踪时间的方式。它计算自1970 年 1 月 1 日 00:00:00 UTC(称为"Unix 纪元"的参考点)以来经过的秒数。
例如,Unix 时间戳 1719000000 代表一个特定时刻:2024 年 6 月 22 日约 00:00 UTC。每秒,这个数字增加一。
为什么要使用 Unix 时间戳?
Unix 时间戳在软件开发中无处不在,原因如下:
- 时区无关:时间戳在全球代表同一时刻。不存在关于它是 EST、PST 还是 JST 的歧义 — 它始终基于 UTC。
- 易于比较:比较两个时间戳只是简单的数字比较。如果时间戳 A 大于时间戳 B,事件 A 发生在事件 B 之后。
- 高效存储:存储一个 10 位整数远比存储格式化的日期字符串如 "2024-06-22T00:00:00Z" 节省空间。
- 数学运算:向时间戳加 86,400 秒正好是 24 小时后。无需担心月份边界或闰年。
秒 vs. 毫秒
Unix 时间戳有两种常见格式:
- 秒(10 位):原始 Unix 时间戳格式。示例:
1719000000 - 毫秒(13 位):JavaScript 和许多现代 API 使用,以获得更高精度。示例:
1719000000000
一个常见的 bug 来源是混淆这两种格式。如果你将毫秒时间戳传递给期望秒的函数,日期将完全错误(大约在未来 50,000 年)。
在不同语言中使用时间戳
JavaScript
const now = Date.now(); // 毫秒 const seconds = Math.floor(Date.now() / 1000); const date = new Date(seconds * 1000);
Python
import time seconds = int(time.time()) from datetime import datetime dt = datetime.fromtimestamp(seconds)
PHP
$timestamp = time(); // 秒
$date = date('Y-m-d H:i:s', $timestamp);
MySQL
SELECT UNIX_TIMESTAMP(); -- 当前时间戳 SELECT FROM_UNIXTIME(1719000000); -- 转换为日期
常见陷阱
- 2038 年问题:32 位有符号整数将在 2038 年 1 月 19 日溢出。使用 32 位时间戳的系统需要迁移到 64 位整数。
- 闰秒:Unix 时间戳不计算闰秒。大多数系统直接忽略它们,这可能导致与原子时间略有偏差。
- 时区显示:始终记住 Unix 时间戳是 UTC 的。向用户显示时需要转换到他们的本地时区。
TryQuickToolBox 时间戳转换器
我们的免费工具在 Unix 时间戳(秒和毫秒)、ISO 8601 日期、UTC 时间和本地时间之间互相转换。自动检测意味着你可以粘贴任何格式并获得即时结果。点击任意结果即可复制到剪贴板。