Timezone.now() против datetime.datetime.now()

Когда я должен использовать Django timezone.now() и когда я должен использовать питона 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() вернет объект, осведомленный о часовом поясе.

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

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

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

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

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

Если вы хотите использовать UTC и используете Python 3.2 или выше, в этом ответе говорится, что вы можете:

import datetime
datetime.datetime.now(datetime.timezone.utc)

Это даст вам дату и время UTC с учетом часового пояса.

Другие вопросы по тегам