24

我什么时候应该使用 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())

是否有关于何时使用每种方法的经验法则?

4

3 回答 3

33

只是总是使用timezone.now(). Django 现在有时区支持,需要时区“感知”日期时间对象。datetime.now()将返回一个时区朴素对象,而timezone.now()将返回一个时区感知对象。

阅读更多关于 Django 时区的信息

于 2014-11-15T19:55:58.123 回答
3

您可以在 shell 中编写,例如:

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

错误信息是:

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

它们是不同的对象,只有 timezone.now() 支持 UTC

于 2019-10-09T14:02:04.927 回答
1

如果你想使用 UTC,并且你使用的是 Python 3.2 或更高版本,这个答案说你可以这样做:

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

这将为您提供一个时区感知的 UTC 日期时间。

于 2020-01-11T18:35:40.550 回答