我已经从我的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)')
有什么想法如何解决它或我做错了什么?
django总是将数据存储在UTC中。在sqlite中,它根本不存储任何时区信息:
[PostgreSQL以外的数据库]存储数据,而没有时区信息。如果您从
,这不是确定性的。USE_TZ = False
切换到USE_TZ = True
,则必须将数据从当地时间转换为UTC - 如果您的当地时间具有dst。
因此,首先您需要浏览数据库并将所有值转换为UTC;否则,django将无法正确解释值。
为了进行比较,如果您使用的是pytz.timezone
和幼稚的datetime
,那是正确的。但是错误消息意味着您要传递给localize()
的datetime
已经是时区感知了。要转换时区感知datetime
,您需要使用datetime.astimezone()
,如PYTZ文档中所述。