时间戳(Timestamp)是编程和系统开发中最常用的时间表示方式。本教程详细介绍 Unix 时间戳的概念、与日期的相互转换、常见陷阱,以及在不同开发场景中的实际应用。
Unix 时间戳是指从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)到某个时间点所经过的秒数(或毫秒数)。它是一个整数,不受时区和夏令时影响,因此在计算机系统中广泛使用。例如,时间戳 1700000000 对应 2023 年 11 月 14 日 22:13:20 UTC。
| 特性 | 秒级时间戳(10位) | 毫秒级时间戳(13位) |
|---|---|---|
| 精度 | 1 秒 | 0.001 秒 |
| 示例 | 1700000000 | 1700000000123 |
| 常见于 | Linux 系统、数据库 TIMESTAMP、PHP time() | JavaScript Date.now()、Java System.currentTimeMillis() |
识别技巧:如果看到 10 位数字(如 1700000000),是秒级时间戳;13 位(如 1700000000123),是毫秒级。当前(2020年代)的秒级时间戳约在 17 亿左右。
查看日志中的时间戳对应的实际时间,快速定位问题发生时刻。
将日期范围转为时间戳,用于 SQL WHERE 条件过滤(如查询最近 7 天的数据)。
分析 API 返回数据中的时间戳字段,转换为可读的日期时间格式。
查看证书过期时间、文件修改时间等系统时间戳。
Unix 时间戳本身是时区无关的——它表示从 UTC 1970-01-01 00:00:00 起经过的秒数。但在转换为可读日期时,需要选择目标时区。熙熙工具站默认使用中国标准时间(CST,UTC+8)。如果您的应用服务器在海外,请注意时区差异:同一时间戳,UTC 时区显示的时间会比 CST 早 8 小时。
32 位系统中,以有符号 32 位整数存储的秒级时间戳最大值为 2147483647,对应 2038 年 1 月 19 日 03:14:07 UTC。超过此时刻,时间戳会溢出变为负数(称为"2038 年问题",类似于千年虫)。现代 64 位系统已解决此问题,但如果维护旧的嵌入式系统或 32 位程序,需要留意。
Q:为什么转换后时间差了 8 小时?
A:很可能是时区问题。Unix 时间戳是 UTC 时间,如果您期望看到的是中国时间(UTC+8),需要在转换时选择对应的时区。
Q:毫秒时间戳和秒时间戳如何区分?
A:看位数。当前(2020年代)秒级约 10 位、毫秒级约 13 位。如果不确定,可以两个都试试——秒级转出来的日期在 1970 到 2100 之间才是正确的。
Q:如何获取当前时间戳?
A:工具打开时会自动显示当前时间戳(秒级和毫秒级),无需手动输入。也可以点击"现在"按钮刷新。