naive/aware datetime 报错:时区混用导致的栈
现象
TypeError: can't compare offset-naive and offset-aware datetimes。
根因
USE_TZ=True 时混用了 naive 和 aware 时间;或手动 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