2

给定今天过滤 Django 条目的日期范围:

today_min = datetime.datetime.combine(timezone.now(), datetime.time.min)
today_max = datetime.datetime.combine(timezone.now(), datetime.time.max)
today_events = Entry.objects.filter(due_date_time__range=(today_min, today_max))

为了考虑时区支持,我显然使用timezone.now()而不是,但我仍然收到错误消息:datetime.date.today()

RuntimeWarning: DateTimeField received a naive datetime (2013-01-13 00:00:00) while time zone support is active.

RuntimeWarning: DateTimeField received a naive datetime (2013-01-13 23:59:59.999999) while time zone support is active.

我在看什么?谢谢

4

1 回答 1

0

根据 Python 3.2 中 datetime 模块的来源, datetime.datetime.combine 的结果是这样构造的:

@classmethod
def combine(cls, date, time):
    ...

    return cls(date.year, date.month, date.day,
               time.hour, time.minute, time.second, time.microsecond,
               time.tzinfo)

所以 tzinfo 在这里不被尊重,你使用 combine 函数的方式(如果 Python 2.X 版本的 datetime 以 3.2 版本的方式执行)。

要获得本地化的日期时间对象,Django文档建议这样做:

from django.utils import timezone
timezone.localtime(timezone.now())
于 2013-01-13T22:01:53.010 回答