7

これは些細な質問かもしれませんが、django now() を で定義されたタイムゾーンに入れることはできませんsettings.TIME_ZONEか?

これが実際に起こっていることです:

>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2012, 5, 30, 16, 30, 0, 782087, tzinfo=<UTC>)
>>> timezone.get_default_timezone()
<DstTzInfo 'Asia/Singapore' SMT+6:55:00 STD>
4

3 に答える 3

13

Djangoのソースコード(選択した回答に表示されているように)は、次の概念を説明していますtimezone.now()

  1. datetime.now()タイムゾーン情報(「ナイーブ日時」)なしで(アクティブなタイムゾーンで!)現在の時刻を生成しますが、...
  2. timezone.now() 常にタイムゾーン情報を含む現在時刻を UTC (!)で表示します。

これは一見イライラしますね、はい。アクティブなタイムゾーンの現在の時刻を取得することもできましたが、そうしませんでした。timezone.localtime(timezone.now())必要なものを取得するために引き続き使用できます。

from django.utils import timezone
from datetime import datetime

timezone.get_current_timezone()
# <DstTzInfo 'Antarctica/McMurdo' LMT+11:39:00 STD>
datetime.now()
# datetime.datetime(2014, 8, 19, 20, 8, 8, 440959)
timezone.localtime(timezone.now())
# datetime.datetime(2014, 8, 19, 20, 8, 14, 889429, tzinfo=<DstTzInfo 'Antarctica/McMurdo' NZST+12:00:00 STD>)
timezone.now()
# datetime.datetime(2014, 8, 19, 8, 8, 22, 273529, tzinfo=<UTC>)
datetime.utcnow()
# datetime.datetime(2014, 8, 19, 8, 8, 29, 769312)

初心者や通常のユーザーにとってtimezone.localtime(timezone.now())は、おそらく最も直感的です。タイムゾーン情報を保持する現地時間。

于 2014-08-19T09:08:18.620 に答える
1

または、ソースを読むこともできます:

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()

答えはノーです。自分で調整する必要があります。

于 2012-05-30T16:40:10.007 に答える
0

場合によります

now() USE_TZ がそれぞれ True または False の場合、現在の時点を表す認識または単純な日時を返します。

https://docs.djangoproject.com/en/dev/ref/utils/#django-utils-timezone

したがって、すべてがあなたのケースでは USE_TZ が false であることを示しており、TZ を考慮していません。

于 2012-05-30T16:39:58.697 に答える