什么是 UNIX 时间?
UNIX 时间(又称 UNIX 时间戳或 POSIX 时间)指的是自 UNIX 纪元(1970-01-01 00:00:00 UTC)以来经过的总秒数。它用一个整数就能表示某一时刻,跨语言、跨平台通用,因此在日志记录、数据库、API 接口和各种编程场景中被广泛使用。需要注意的是,UNIX 时间不计入闰秒——每一天都被严格当作 86,400 秒来处理。
如何使用本计算器
先按照本地挂钟显示的数字,填入日历日期(年、月、日)和时间(时、分、秒)。然后在“与 UTC 的时差”一栏,按小时填写该本地时间所对应的时区偏移。例如:日本为 +9,印度为 +5.5,美国太平洋标准时间为 -8。默认偏移为 +9(日本时间)。时、分、秒留空即按 0 处理。
计算公式解析
计算时,首先用 Howard Hinnant 提出的 days-from-civil 算法把日期换算成天数。该算法能正确计算任意公历日期(包括闰年以及 1970 年之前的日期)相对于纪元的天数。把这个天数乘以 86,400,再加上时、分、秒,就得到了本地时间下自 1970-01-01 00:00:00 起的秒数。最后再减去 UTC 偏移(小时数 × 3600),将结果换算回 UTC,即得 UNIX 时间。
$$ \begin{gathered} t = 86400 \cdot D + 3600\,\text{Hour} + 60\,\text{Minute} + \text{Second} - 3600\,\text{UTC Offset} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} D &= \text{days from } 1970\text{-}01\text{-}01 \text{ to the chosen date} \\ \text{date} &= \left(\text{Year},\ \text{Month},\ \text{Day}\right) \end{aligned} \right. \end{gathered} $$
实例演示
以偏移 +9 的 2025-06-15 00:00:00 为例:距纪元天数 daysSinceEpoch = 20254,因此本地秒数 localSeconds = \(20254 \times 86400 = 1{,}749{,}945{,}600\)。再减去 \(9 \times 3600 = 32{,}400\),得到 UNIX 时间为 1,749,913,200,对应的 UTC 时间为 2025-06-14 15:00:00。
常见问题
为什么正偏移算出来的时间戳比我预想的要小?因为本地时间快于 UTC,它对应的其实是更早的 UTC 时刻,所以同样的挂钟读数,当作正偏移本地时间得到的 UNIX 值,会小于直接当作 UTC 来算的结果。
能处理 1970 年之前的日期吗?可以,结果会是负数。例如 1969-12-31 23:59:59 UTC 对应的 UNIX 时间为 -1。
会计入闰秒吗?不会。本工具遵循标准 POSIX 定义,每一天都恰好为 86,400 秒。