查询django时,不是天真的时区



我已经从我的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文档中所述。

相关内容

  • 没有找到相关文章

最新更新