为何Python中datetime与time的isoformat输出存在差异?
问题解释:datetime.isoformat()与time.isoformat()输出不一致
问题代码
from datetime import datetime, time from zoneinfo import ZoneInfo time(8, 37, 9, tzinfo=ZoneInfo("UTC")).isoformat() # '08:37:09+00:00' datetime.utcnow().isoformat() # 2023-07-13T08:37:09.033778 time(8, 37, 9, 33778).isoformat() # 08:37:09.033778 time(8,37,9, 33778, ZoneInfo("UTC")).isoformat() # 08:37:09.033778+00:00
原因分析
核心差异在于时区信息的有无:
datetime.utcnow()返回的是无时区感知(naive)的datetime对象,它的值是UTC时间,但对象本身没有绑定时区元数据,因此调用isoformat()时不会输出时区偏移部分。- 传入
tzinfo参数的time对象是带时区感知(aware)的对象,isoformat()方法会自动在末尾附加时区偏移字符串(如+00:00)。
对齐格式的方法
如果想要让datetime的输出和带时区的time对象格式一致,改用datetime.now(ZoneInfo("UTC"))获取带UTC时区的感知型datetime,此时调用isoformat()会输出类似2023-07-13T08:37:09.033778+00:00的结果,和带时区的time对象格式对齐。
内容的提问来源于stack exchange,提问作者Mathieu B.
相关产品推荐
相关产品推荐

