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)
我可以知道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)