63

私のサーバーはロンドンにあります。

settings.pyは持っています:

TIME_ZONE = 'Europe/Moscow'
USE_TZ = True

しかし、これを実行すると:

from django.utils import timezone

print timezone.now().hour

コードはロンドンの時間を出力します。私は何を間違っていますか?

アップデート:

>> timezone.now()
datetime.datetime(2013, 4, 16, 12, 28, 52, 797923, tzinfo=<UTC>)

面白い… tzinfo = <UTC>。では、ロンドン時間ではなく、UTC の +0 時間を出力するのでしょうか? とにかく、Django にモスクワ時間を表示させる方法はありますか?

また、テンプレートをレンダリングするときnow = timezone.now()

{{ now.hour }}プリント 12 (ロンドン時間)

{{ now|date:"G" }}プリント 16 (モスクワ時間)

4

4 に答える 4

107

Django docs の「使用法」セクションの質問 #2 を参照してください。

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

上記のドキュメントでは、以下の抜粋を含むベスト プラクティスについても説明されています。

現在のタイムゾーンで現地時間を取得するにはどうすればよいですか?

最初の質問は、本当に必要ですか?

人間とやり取りするときは現地時間のみを使用する必要があります。テンプレート レイヤーには、日時を選択したタイム ゾーンに変換するためのフィルターとタグが用意されています。

さらに、Python は、必要に応じて UTC オフセットを考慮して、認識された日時を比較する方法を知っています。すべてのモデルとビューのコードを UTC で記述した方がはるかに簡単 (そしておそらく高速) です。したがって、ほとんどの場合、django.utils.timezone.now() によって返される UTC の日時で十分です。

于 2013-04-16T12:36:50.713 に答える
3
from django.utils import timezone
time = timezone.localtime() 

TIME_ZONE が設定されているものは何でも、現地時間を提供します。

time = timezone.localtime(timezone.now()) # same result, but it is redundant.
于 2020-08-07T08:45:31.090 に答える