每段片段的出发点都一样:Unix 秒确定的是一个瞬间,但每种语言的日期 API 表示它的方式各不相同。在下面挑一种语言,在 API 边界上确认单位,再把结果搬进生产代码。

一条简明的规则

  • 大多数 Unix 和服务端 API 用秒。
  • JavaScript Date、Java 和 .NET 通常也直接暴露毫秒。
  • 放进 JSON 时,ISO 8601 的 UTC 字符串往往是最清楚的表示。
  • 面向人的展示用具名时区;存储和比较则保留 UTC 或 epoch 值。

这些片段刻意避开了那些悄悄生效的本地时间默认值。一个在某台开发机上对、换到 CI 服务器上就变了的时间戳,不算安全地转换过。

Frequent questions:

Q: 为什么 JavaScript 用毫秒,而其他语言大多用秒?
A: JavaScript 是为浏览器设计的,动画和事件计时都需要亚秒级精度,所以 Date 对象直接采用了“自 Unix 纪元以来的毫秒数”。而服务端语言(Python、PHP、Go、Ruby)默认给的是秒。用之前,先查一眼你要对接的那个 API 的文档。
Q: 不用库,JavaScript 里怎么拿 Unix 时间戳?
A: 秒用 Math.floor(Date.now() / 1000),毫秒直接用 Date.now()。两者都是每个 JavaScript 运行时的内置能力,不需要引入任何依赖。
Q: 不用库,Python 里怎么拿 Unix 时间戳?
A: 秒用内置 time 模块的 int(time.time()),毫秒用 int(time.time() * 1000)。需要带时区的转换时,配合 datetime 模块和 datetime.timezone.utc 使用。