下面这些 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 在系统边界上最好避开,因为它的时区含义完全是隐含的。