0

Django 文档非常清楚不应使用幼稚的日期时间,但我有一个用例,我认为在我认为需要它们的地方相当普遍。有时在我的项目中需要跨时区查询对象,但要基于当地时间。

例如,这只是一个人为的例子,假设我想根据每个用户的 local timezone查找在给定日期的下午 4 点到 5 点之间最后更新个人资料的所有用户。我可以简单地这样做:

qs = User.objects.filter(profile__datelastupdated__gte=datetime(2013,4,1,16))
qs = qs.filter(profile__datelastupdated__lte=datetime(2013,4,1,17))

但是,因为我有时区支持处于活动状态,这会导致警告:

RuntimeWarning: DateTimeField received a naive datetime (YYYY-MM-DD HH:MM:SS) while time zone support is active.

我理解为什么会抛出警告,所以我的问题是:我没有以正确的方式考虑日期时间吗?是否有一种惯用的 Django 方式来获得 tz 感知日期时间的特殊性,而这正是您想要的,并且还具有天真的日期时间提供的有时需要的所需通用性?

4

1 回答 1

0

您必须使用 datetime + timezone 过滤数据库,数据库中的所有日期始终存储为 utc。如果您提供没有时区的日期,django 会将其默认为 utc 并给您带来交战。
如果您支持时区,则必须存储用户时区。使用日期+当前用户时区询问数据库与放置日期相同。

于 2013-04-08T18:34:43.700 回答