65

夏時間の処理に少し混乱しています

settings.py:

TIME_ZONE = 'Europe/London'
USE_TZ = True

djangoシェルで:

>>> from django.utils import timezone
>>> import datetime
>>> print timezone.now()
2012-05-28 11:19:42.897000+00:00
>>> print timezone.make_aware(datetime.datetime.now(),timezone.get_default_timez
one())
2012-05-28 12:20:03.224000+01:00

夏時間に関して同じではないのはなぜですか?どちらもロケールに対応している必要がありますね。

私はドキュメントを読みましたが、賢明ではありません。

4

5 に答える 5

89

timezone.now() ソースによると:

def now():
    """
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
    """
    if settings.USE_TZ:
        # timeit shows that datetime.now(tz=utc) is 24% slower
        return datetime.utcnow().replace(tzinfo=utc)
    else:
        return datetime.now()

utcこれは、デフォルトのタイムゾーンではなくに基づいています。を使用して同じ値を達成できます

now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)
于 2012-05-28T12:11:53.737 に答える
32

Django 1.11 以降、デフォルトのタイムゾーンを呼び出すだけdjango.utils.timezone.localtimeで取得できるようになりました。datetime

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

ドキュメントから:

対応する日時を別のタイム ゾーン (デフォルトでは現在のタイム ゾーン) に変換します。

値を省略した場合のデフォルトはnow()です。

この関数は単純な日時では機能しません。代わりに使用make_aware()します。

于 2018-03-20T21:13:50.863 に答える