我已经从Sqlite-DB中删除了所有时区初始条目。所以现在他们剩下的条目都有这样的日期字段:
2016-09-04 13:28:16 + 00
当我现在运行我的查询时:
result = Feedentry.objects.filter(date_published__gt=timezone('Europe/Berlin').localize(datetime(2016, 8, 31, 17)))
首先我没有收到任何错误,但只要我想访问结果(或len(结果)),我就会收到以下错误:
raise ValueError('Not naive datetime (tzinfo is already set)')
任何想法如何解决或我做错了什么?
答案 0 :(得分:1)
Django始终以UTC格式存储日期时间。在SQLite中doesn't store any timezone information at all:
[PostgreSQL以外的数据库]存储没有时区信息的日期时间。如果您从
USE_TZ = False
切换到USE_TZ = True
,则必须将数据从当地时间转换为UTC - 如果当地时间有夏令时,这不是确定性的。
首先,您需要浏览数据库并将所有值转换为UTC;否则,Django将无法正确解释这些值。
至于您的比较,如果您正在使用pytz.timezone
和天真的datetime
,这是正确的。但错误消息表明,您传递给datetime
的任何localize()
已经是时区感知的。要转换时区感知datetime
,您需要使用datetime.astimezone()
,如pytz documentation中所述。