web-dev-qa-db-ja.com

djangoでタイムゾーン対応の日付を取得するにはどうすればよいですか?

python Djangoの日時計算にdeloreanを使用しています。

http://delorean.readthedocs.org/en/latest/quickstart.html

これは私が使用しているものです:

now = Delorean(timezone=settings.TIME_ZONE).datetime
todayDate = now.date()

しかし、私はこの警告を受けます:

RuntimeWarning: DateTimeField start_time received a naive datetime (2014-12-09 00:00:00) while time zone support is active.

それを意識させる方法を知りたい。

私もこれを試しました:

todayDate = timezone.make_aware(now.date(), timezone=settings.TIME_ZONE)

それから私はこれを手に入れます:

AttributeError: 'datetime.date' object has no attribute 'tzinfo'
17
user3214546

Pythonには「タイムゾーン対応の日付」の概念がないため、dateオブジェクトとdatetimeオブジェクトのどちらを使用しようとしているのかは明確ではありません。

現在のタイムゾーンの現在の時刻に対応するdateオブジェクトを取得するには、次を使用します。

# All versions of Django
from Django.utils.timezone import localtime, now
localtime(now()).date()

# Django 1.11 and higher
from Django.utils.timezone import localdate
localdate()

つまり、UTCで現在のタイムゾーン対応datetimeを取得しています。ローカルタイムゾーンに変換します(つまり、TIME_ZONE);それから日付を取得します。

現在のタイムゾーンの現在の日付の00:00:00に対応するdatetimeオブジェクトを取得する場合は、次のようにします。

# All versions of Django
localtime(now()).replace(hour=0, minute=0, second=0, microsecond=0)

# Django 1.11 and higher
localtime().replace(hour=0, minute=0, second=0, microsecond=0)

これと あなたの他の質問 に基づいて、あなたはDeloreanパッケージに混乱していると思います。 DjangoとPythonの日時機能を使用することをお勧めします。