实际上,有三个类似的函数:
datetime.now(tz=None)
返回当前本地日期和时间。
datetime.today()
返回当前本地日期时间,tzinfo
为 None。
datetime.utcnow()
返回当前UTC日期和时间,tzinfo
为 None。
首先要注意的是来自文档的:
此函数(datetime.now()
)优于 datetime.today()
和 datetime.utcnow()
我认为有两个原因:
首先,在功能上,`datetime.now` 可以完成 `datetime.today` 和 `datetime.utcnow` 的功能,但反过来不行。
>>> from datetime import datetime
>>> from datetime import timezone
>>>
>>>
>>>
>>> datetime.now(tz=None)
datetime.datetime(2022, 11, 2, 14, 59, 29, 265094)
>>> datetime.today()
datetime.datetime(2022, 11, 2, 14, 59, 29, 650280)
>>>
>>>
>>>
>>> datetime.now(tz=timezone.utc)
datetime.datetime(2022, 11, 2, 6, 59, 58, 298594, tzinfo=datetime.timezone.utc)
>>> datetime.utcnow()
datetime.datetime(2022, 11, 2, 6, 59, 58, 763605)
此外,请注意
datetime.utcnow()
的输出中丢失了
tzinfo
。
这意味着您没有机会在上下文之外知道确切的时间。
这也在
文档中指出:
警告:由于许多datetime
方法将单纯的datetime
对象视为本地时间,
因此最好使用感知时区的datetime
表示UTC时间。
因此,表示当前UTC时间的推荐方法是调用datetime.now(timezone.utc)
。
import datetime.datetime, pytz; datetime.datetime.now(tz=pytz.timezone('US/Eastern'))
。更多细节请参见此处。 - Vivek Subramaniannow()
比today()
更快。在我的机器上,now()
平均为 213 纳秒,而today()
平均为 653 纳秒。这可能微不足道,也可能不是,具体取决于你正在做什么。 - Steven C. Howell