Вы должны включить USE_TZ
. Если вы посмотрите внимательно, вы увидите, что datetime.now()
не указывает часовой пояс (начальное время), а timezone.now()
- время, учитывающее часовой пояс). С USE_TZ=True
все объекты даты и времени преобразуются в абсолютное время UT C с учетом времени и часового пояса, поэтому нет никакой двусмысленности относительно фактического момента времени.
timezone.now()
должно дать вам 14:28 с tzinfo = UT C когда в Лондоне 15:28 (сейчас, в апреле):
>>> timezone.now()
datetime.datetime(2020, 4, 6, 14, 41, 13, 296983, tzinfo=<UTC>)
>>> datetime.now()
datetime.datetime(2020, 4, 6, 15, 42, 3, 320929) # no tzinfo
Представьте, что ваш пользователь устанавливает будильник на 25 октября 2020 года, 2:30. Теперь это неоднозначно, поскольку это время будет происходить дважды в Лондоне: один раз во время летнего времени и через час после того, как мы вернулись в зимнее время и перевели наши часы с 3 до 2 часов. Но если вы измените это на UT C, это не будет двусмысленным, есть только один 2020/10/25 2:30 UT C (когда Европа / Лондон в зимнее время, когда GMT = UT C) , Так что это должно быть 1:30 или 2:30 (UT C).
Так что определенно, если вы создаете приложение, в котором есть расписание, используйте USE_TZ
, иначе у вас будут проблемы с летним временем.