Django docs氏は述べています:あなたが作るしようとした場合Djangoのmake_awareの使用量は、
pytz.NonExistentTimeError
例外が発生します(DSTに入る際に)時間が 発生したことがないよう、DST移行中に意識value
。is_dst
~True
またはFalse
を設定すると、時間を前後に1:ずつ移動することによって、 の例外が回避されます。たとえば、is_dst=True
は、存在しない の時刻を2:30から1:30に変更し、is_dst=False
から時刻を3:30に変更します。
is_dst
の値に応じて、時間を前後にずらすことができます。
私のテストから、タイムゾーンはシフトされていますが、時間はシフトされていません。私はDjangoのドキュメントを誤解していますか?これはバグですか?
私は次のようにテストした:
import pytz
import datetime
from django.utils.timezone import make_aware
tz = pytz.timezone('America/Sao_Paulo')
dt = datetime.datetime(2017, 10, 15 ,0 ,0)
print(make_aware(dt, tz)) # NonExistentTimeError
print(make_aware(dt, tz, True)) # 2017-10-15 00:00:00-02:00
print(make_aware(dt, tz, False)) # 2017-10-15 00:00:00-03:00
2017年10月15日には、クロックが01:00にジャンプする必要があります0時00分に達したときにDSTはそう、そのAmerica/Sao_Paulo
タイムゾーンで開始されたときです。 make_aware
メソッドによって返される日付時刻は存在しません。
インポートステートメントが追加されました。 'pytz'は[Pythonの世界タイムゾーン定義](http://pytz.sourceforge.net/) –
です。 'make_aware'は[pytz'タイムゾーンのための別のコードパス]を持っています(https://github.com/django/django/blob/1.11b1/django/utils/timezone.py#L284) –