datetime 与不带时区的时间相减,抛 TypeError: offset-naive and offset-aware。日志里能对上时间点,这种反而好排。

naive 时间不带时区信息,aware 时间带偏移,两者相减缺少统一基准,Python 直接拒绝而不是替你猜一个时区。这一点先确认清楚,后面就不用反复试。

from datetime import datetime, timezone
d = datetime.now(timezone.utc)
print(d - old.astimezone(timezone.utc))

这次卡住的地方就在「Python 时区感知」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

处理上按这个顺序:数据入口处统一给每个时间补上明确的时区信息;存储统一用 UTC 时间,展示前再转回本地时区;跨库比较前先 astimezone 对齐。

结果对不对很好判断,相减得到正常的 timedelta,跨时区的数据比较结果一致。

作者 9823189