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 с учетом часового пояса.