Skip to main content
 首页 » 编程设计

python之日期范围和天真的日期时间抛出 Runtimewarning

2025年05月04日10jpfss

给定今天的日期范围以过滤 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. 

我忽略了什么?谢谢

请您参考如下方法:

根据 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 docs推荐这个:

from django.utils import timezone 
timezone.localtime(timezone.now())