2013-01-13 114 views
1

鑑於日期範圍爲今天來過濾在Django的條目:日期範圍和天真的日期時間扔Runtimewarning

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. 

我在忽略什麼?由於

回答

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這裏沒有兌現,您使用的組合方式函數(如果日期時間的Python 2.X版本以3.2版本的方式進行操作)。

要獲得本地化的日期時間對象,Django的docs建議是:

from django.utils import timezone 
timezone.localtime(timezone.now()) 
相關問題