下面这些 Python 示例以 Unix 秒作为通用基准,只有在运行时天然提供毫秒的地方才展示毫秒。复制之前先回答一个简单的问题:下游那个 API 要的是什么单位?

获取当前 Unix 时间

import time

seconds = int(time.time())
milliseconds = time.time_ns() // 1_000_000

把时间戳转成 UTC

from datetime import datetime, timezone

instant = datetime.fromtimestamp(1700000000, tz=timezone.utc)
print(instant.isoformat())

上生产前留意

转换和显示都请用带时区的 datetime。不带 tz 参数的 datetime.fromtimestamp 会使用本机的本地时区。

值跨越系统边界时,把单位写进字段名里:createdAtSeconds 和 createdAtMs 是比 createdAt 长了点,但出事故的时候能省下不少猜测。

Frequent questions:

Q: time.time() 返回的是整数吗?
A: 不是,它返回的是浮点数形式的秒。想要整数秒就套一层 int();需要毫秒时,先乘再取整。
Q: datetime 该用 naive 还是带时区的?
A: 面向接口、数据库和日志时,请用带时区的 UTC datetime。naive 的 datetime 在系统边界上最好避开,因为它的时区含义完全是隐含的。