什么是毫秒级 Unix 时间戳?
Unix 时间戳记录的是自 1970-01-01 00:00:00 UTC(即所谓的"纪元/Epoch")以来经过的时间。许多编程语言和接口(例如 JavaScript 的 Date.now()、Java 的 System.currentTimeMillis(),以及大量 JSON 数据)都以毫秒而非秒来表示这个数值。本工具能把这串原始数字转换成清晰、易读的 UTC 日期和时间。
如何使用本工具
把你的毫秒时间戳粘贴或输入到输入框中并提交即可。工具会先将数值除以 1000 得到整数秒,再从纪元起点出发,把这些秒映射到日历上。你会得到完整的 ISO 8601 字符串(例如 2023-11-14T22:13:20Z),以及拆解后的年、月、日、时、分、秒——全部以 UTC 计算,因此结果不受你本地时区的影响。
换算公式解析
整个换算只有两步。第一步,秒数 = floor(毫秒 / 1000),舍去不足一秒的余数。第二步,日期 = 纪元 + 秒数,把这些秒加到 1970 年 1 月 1 日的零点上。闰年、各月天数不同等日历规则都会自动处理。
$$\begin{gathered} \text{Date}_{\text{UTC}} = \text{Epoch}_{1970} + t_{s}\ \text{seconds} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} t_{s} &= \left\lfloor \dfrac{\text{Epoch Time (ms)}}{1000} \right\rfloor \\ \text{Epoch}_{1970} &= \text{1970-01-01T00:00:00Z} \end{aligned} \right. \end{gathered}$$
实例演示
以 1,700,000,000,000 毫秒为例。除以 1000 得到 1,700,000,000 秒。把它加到纪元起点上,对应的就是 2023-11-14T22:13:20Z——也就是 2023 年 11 月 14 日 22:13:20(UTC)。
$$\frac{1{,}700{,}000{,}000{,}000}{1000} = 1{,}700{,}000{,}000\ \text{seconds}$$$$\text{Date}_{\text{UTC}} = \text{Epoch}_{1970} + 1{,}700{,}000{,}000\ \text{seconds} = \text{2023-11-14T22:13:20Z}$$
常见问题
结果是我所在地区的本地时间吗? 不是。为避免歧义,输出始终采用 UTC(协调世界时)。如需本地时间,请自行加上你所在时区的偏移量(中国大陆为 UTC+8)。
如果我手上的是秒、而不是毫秒怎么办? 先把以秒为单位的时间戳乘以 1000 再输入,或者直接在末尾补上三个零即可。
为什么有时换算出的日期会落在遥远的未来或 1970 年? 把秒当成毫秒输入,结果会接近 1970 年;而把本来就是毫秒的数值又多补了零,结果就会跑到很久以后。请务必确认你的单位确实是毫秒。