使用 Unix 时间戳:把纪元时间讲简单
更新 2026-07-06
打开一个 API 响应或数据库的一行,你常会发现日期被存成像 1751760000 这样的普通数字。那就是 Unix 时间戳,海量软件用它来记录时间。本指南讲清这个数字是什么意思、为什么计算机这样计时,以及那些坑 —— 秒 vs. 毫秒、时区,还有 2038 年问题。
什么是 Unix 时间戳
Unix 时间戳是自一个叫 纪元(epoch) 的固定时刻 —— 1970 年 1 月 1 日 00:00:00 UTC —— 以来经过的 秒 数。所以 0 就是纪元本身,60 是它之后一分钟,1751760000 是 2025 年的某一刻。它只是一个不断累加的秒计数。
为什么从 1970 年开始数秒?
把时间表示成单一整数对计算机极其方便。比较两个时刻变成比较两个数字;求它们之间的间隔是减法;给事件排序不过是给整数排序 —— 全都不必去推敲日历、月份、闰年或时区。1970 这个起点是 Unix 操作系统早期的一个历史选择,就这么沿用了下来。
秒 vs. 毫秒的坑
这是几乎人人至少踩一次的错误。Unix 时间戳传统上以 秒 为单位,但许多系统 —— 尤其是 JavaScript —— 用 毫秒(千分之一秒)。两者相差 1000 倍:
秒: 1751760000 毫秒: 1751760000000
把一个秒值喂给期待毫秒的东西,你的日期会落在 1970 年;反过来则会落到几万年后的未来。快速自检:当前的时间戳,秒 是 10 位;毫秒 是 13 位。当一个转换出来的日期看着荒唐时,几乎总是这个原因。
时区与 UTC
Unix 时间戳的一个关键优势:数字本身 永远是 UTC。它代表一个精确的时刻,对地球上每个人都相同。时间戳 1751760000 是单一时刻;它显示为伦敦的下午 4 点还是纽约的上午 11 点,纯粹是最后才施加的显示选择。把时间存成 UTC 时间戳、只在显示时才转成本地时间,能整类地避开时区 bug。要在不同地区看同一时刻,时区转换器 正是干这活的工具。
与人类日期互相转换
你会不断需要双向转换 —— 把时间戳变成可读日期来调试日志,或把日期变成时间戳来查询 API。我们的 Unix 时间戳转换器 即时完成两者,并以你的本地时间和 UTC 显示结果。若改为测量两个日期之间的间隔,日期差计算器 直接搞定。
2038 年问题
较老的系统把时间戳存成 有符号 32 位整数,它只能数到 2,147,483,647。这个上限在 2038 年 1 月 19 日 03:14:07 UTC 到达 —— 一秒之后计数器溢出、回绕成负数,把日期抛回 1901 年。这和 Y2K 是同一类 bug。修复早已普及:用 64 位整数,把极限推到约 2920 亿年之后。大多数现代软件没问题,但在碰遗留系统时值得知道。
速查
- Unix 时间戳 = 自 1970 年 1 月 1 日 UTC 以来的秒。
- 10 位 = 秒;13 位 = 毫秒。
- 值永远是 UTC —— 只在显示时施加时区。
- 32 位存储在 2038 年出问题;64 位不会。
更多 网络与开发者
查看全部 网络与开发者 指南 →本指南提到的工具