{ }
EN

时间戳转换

Unix 时间戳与可读日期互转。

关于 Unix 时间戳

Unix 时间戳是从 Unix 纪元 —— 1970 年 1 月 1 日 00:00:00 UTC —— 起经过的秒数。它是几乎所有数据库、编程语言和网络协议描述某一刻的标准方式:与时区无关、单调递增、易于排序。JavaScript 与许多高精度 API 使用毫秒变体,本质上就是把秒数乘以 1000。

本工具同时接受 Unix 时间戳(10 位为秒、13 位为毫秒)和 JavaScript Date 构造函数能识别的任何字符串 —— 包括 ISO 8601、RFC 2822 等。然后它会同时输出 5 种格式,方便你按下游系统期望的格式复制。

使用场景

  • 把日志或数据库里的时间戳转换为本地时区的可读日期。
  • 判断时间戳是按秒还是按毫秒存储。
  • 为需要 epoch 时间的 API 请求生成时间戳。
  • 把两个事件并排查看 ISO 8601 UTC 值进行对比。
  • 把 ISO 8601 字符串转为 Unix 数值后写入数字列。

最佳实践

  • 时间戳在数据库层始终用 UTC 存储,仅在展示层转为用户时区。
  • JSON API 中优先使用 ISO 8601 字符串 —— 无歧义、易读。
  • 用 64 位整型存时间戳,避免 32 位有符号在 2038 年溢出的问题。
  • 在 API 合约中明确写清单位(秒还是毫秒)。

常见问题

应该用秒还是毫秒?
Unix 标准是秒。JavaScript Date.now() 是毫秒。13 位几乎都是毫秒,10 位是秒。
Unix 时间戳带时区吗?
不带。它始终是从 UTC 纪元起算的秒数。换算成本地时间是在显示时进行的。
什么是 2038 年问题?
32 位有符号时间戳会在 2038 年 1 月溢出。使用 64 位整型即可避免。
ISO 8601 末尾的 Z 是什么?
Z 代表 "Zulu time",军用术语里就是 UTC,等价于偏移 +00:00。