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 に答える