Timezone.now() vs datetime.datetime.now()

Когда я должен использовать django timezone.now() и когда я должен использовать python datetime.datetime.now().

Например, в следующем INSERT, что будет иметь больше смысла?

- Product.objects.create(title='Soap', date_added=datetime.datetime.now())
- Product.objects.create(title='Soap', date_added=timezone.now())

Есть ли практическое правило, когда следует использовать каждый из них?

Ответ 1

Всегда используйте timezone.now(). Теперь у Django есть поддержка часового пояса, для которой требуются временные объекты времени. datetime.now() вернет наивный объект часового пояса, тогда как timezone.now() вернет объект, имеющий информацию о часовом поясе.

Ответ 2

Вы можете написать в оболочке, например:

timezone.datetime.now() < timezone.now() 

И сообщение об ошибке:

TypeError: can't compare offset-naive and offset-aware datetimes

Это разные объекты, только timezone.now() имеют поддержку UTC