什么是 Unix 时间戳?
Unix 时间戳(也叫纪元时间或 POSIX 时间)指的是从 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数,并且不计入闰秒。它是计算机存储某一时刻的通用方式,与时区和日历格式无关。本工具接收以毫秒为单位的时间戳(大多数编程语言返回的就是这个单位,例如 JavaScript 的 Date.now()),并将其换算为自纪元起的秒、分钟和天数。
如何使用
在输入框中填入你的 Unix 毫秒值并提交即可。工具会对其除以 1000 后向下取整,得到完整的 Unix 秒数——这是数据库、API 以及 Linux 命令 date +%s 中最常见的形式。结果表格还会显示原始毫秒值,以及经过的分钟数和天数,方便你快速核对。
公式详解
核心换算公式为 $$\text{Seconds} = \left\lfloor \frac{\text{Time (ms)}}{1000} \right\rfloor$$ 除以 1000 把毫秒转为秒,向下取整(floor)则去掉小数部分,从而得到整秒的时间戳。分钟用 \(\left\lfloor \frac{M}{60000} \right\rfloor\) 计算,天数用 \(\left\lfloor \frac{M}{86400000} \right\rfloor\) 计算,因为一天有 86,400 秒 = 86,400,000 毫秒。
实例演算
假设 \(M = 1{,}700{,}000{,}000{,}000\)。那么 $$\text{Seconds} = \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000$$ 秒,对应的日期是 2023 年 11 月 14 日。自纪元起的分钟数 \(= \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{60000} \right\rfloor = 28{,}333{,}333\),天数 \(= \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{86{,}400{,}000} \right\rfloor = 19{,}675\)。
常见问题
为什么不是所有地方都用毫秒?较老的系统和许多 API(Unix、Postgres、JWT 中的 exp 字段)都以秒存储,而浏览器和 Java 使用毫秒。两者之间的转换只需乘以或除以 1000 即可。
闰秒怎么算?Unix 时间忽略闰秒,因此它是一条干净的线性计数——便于做算术运算,但与天文意义上的 UTC 并非完全对齐。
2038 年会出问题吗?用有符号 32 位整数存储秒数的系统会在 2038 年 1 月 19 日发生溢出。现代 64 位系统则不受影响。