工作原理
Unix 时间戳统计的是自 1970 年 1 月 1 日 00:00:00 UTC 起经过的时间,且不含闰秒——这意味着它严格来说不是经过秒数的计数,这一点只对天文学家和需要与单调时钟比较的人有影响。它在构造上就没有时区,这正是它的价值:同一时间戳在任何地方都表示同一瞬间,只有在渲染时才套用时区。围绕时间戳的困惑大多来自忘记这个数字根本不携带时区信息。
单位是缺陷最常见的来源。Unix 时间惯例用秒,而 JavaScript 的 Date 构造函数和多数移动平台用毫秒,于是把 1700000000 当作毫秒解释会落到 1970 年 1 月,把 1700000000000 当作秒解释会落到几万年之后。两种错误在这里都一眼可见,输入单位会根据数值大小自动判断——十位数是秒,十三位数是毫秒——并可在两个方向上手动覆盖。
2038 年问题是另一个值得知道的边界。32 位有符号整数表示的秒会在 2038 年 1 月 19 日溢出,任何以这种方式存储时间戳的系统——包括许多嵌入式设备、较旧的数据库,以及 32 位平台上使用 time_t 的 C 代码——都会回绕成负值并报出 1901 年的日期。解决办法是改用 64 位整数,新代码中这已是通例,但在现网系统中远非普遍。本工具全程使用 64 位运算,因此 2038 年之后的日期也能正确渲染。
渲染才是时区介入的环节。同一瞬间在冬季的伦敦是 09:00,在夏季则是 10:00,而这个偏移量并不是常数——它取决于各国政府随时可能调整的夏令时规则。转换器使用浏览器自带的时区数据库,也就是让你的操作系统时钟保持正确的那份数据,因此它反映的是历史与已公布的规则变更,而不是硬编码的偏移表。Europe/London、America/New_York 这类 IANA 时区名才是正确的标识符;EST、CST 之类的缩写含义模糊,任何存储或交换时间的系统都不应使用。
常见应用场景
- 把数据库行或日志行里的时间戳读成真实日期。
- 为查询区间或缓存过期请求头生成时间戳。
- 检查接口的 exp 或 iat 字段是否指向过去的时间。
- 按同事所在时区确认事件发生的当地时间,而不是只看自己的。
- 在迁移前确认某个系统存的是秒还是毫秒。
- 把日期转换成 ISO 8601 字符串,用于日志格式或 JSON 字段。
最后更新: 2026-10-14