Azure Python 函数日期时间表达式

Azure Python Function datetime expression

我可以知道datetime.datetime.utcnow()datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)的区别吗?

第二个来自Azure Function doc,已经通过.utcnow()指定了UTC时间,是否需要添加.replace(tzinfo=datetime.timezone.utc)重新指定UTC时间?根据我的测试,它们同时输出。

查看从两个表达式中得到的对象表示:

import datetime

dt1 = datetime.datetime.utcnow()
dt2 = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)

print(repr(dt1))
# datetime.datetime(2022, 5, 18, 7, 33, 42, 993707)

print(repr(dt2))
# datetime.datetime(2022, 5, 18, 7, 33, 42, 993707, tzinfo=datetime.timezone.utc)

第一个表达式为您提供了一个日期时间对象,其属性设置为当前 UTC date/time。但是the object is naive,意思是没有指定为UTC,所以tzinfo没有设置。第二个表达式通过将 tzinfo 替换为 UTC 来改变这一点。这对 .isoformat 输出有影响(在 Azure 文档中使用):

print(dt1.isoformat())
# 2022-05-18T07:33:42.993707

print(dt2.isoformat())
# 2022-05-18T07:33:42.993707+00:00

第二个表达式附加了 UTC 偏移量,第一个没有。

为什么要关心?

Python 会将 原始日期时间 视为 当地时间 。如果您期望使用 UTC,那可能会非常混乱,因为您使用了 utcnow... 在大多数情况下,立即设置 tzinfo 是更好的选择。在避免 utcnow 的同时给你相同结果的简洁表达式是

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