naive/aware datetime 报错:时区混用导致的栈

现象

TypeError: can't compare offset-naive and offset-aware datetimes

根因

USE_TZ=True 时混用了 naiveaware 时间;或手动 datetime.now() 未转时区。

修复

from django.utils import timezone

now = timezone.now()  # aware

若拿到字符串:

dt = timezone.make_aware(datetime.strptime(s, "%Y-%m-%d %H:%M:%S"), timezone=timezone.get_current_timezone())

模板层使用 {{ dt|localtime }};数据库查询统一使用 aware时间。

排查

是否全局 USE_TZ=True

是否使用timezone.now()而不是datetime.now()

序列化/反序列化是否保留时区信息

我把“时间与时区”作为 gplpal 代码评审单独检查项。

评论 0