我有日期时间字符串2020-10-23T11:50:19+00:00。我可以在没有时区的情况下将其解析为:>>> datetime.strptime('2020-10-23T11:50:19', '%Y-%m-%dT%H:%M:%S')
datetime.datetime(2020, 10, 23, 11, 50, 19)00:00但我在用时区版本解析它时遇到问题。正确的方法是什么?>>> datetime.strptime('2020-10-23T11:50:19+00:00', '%Y-%m-%dT%H:%M:%S+???')
2 回答
慕田峪7331174
TA贡献1828条经验 获得超13个赞
您正在寻找%z:
>>> datetime.strptime('2020-10-23T11:50:19+00:00', '%Y-%m-%dT%H:%M:%S%z') datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
请注意一些 Python 版本兼容性说明:
版本 3.7 中的更改:当
%z
向方法提供指令时strptime()
,UTC 偏移量可以使用冒号作为小时、分钟和秒之间的分隔符。例如,'+01:00:00'
将被解析为一小时的偏移量。此外,提供'Z'
与 相同'+00:00'
。
更强大的方法,它不是strptime
,但自 Python 3.7 以来它仍然在 stdlib 中:
>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00') datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
如文档所述,该函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
其中 * 可以匹配任何单个字符(不仅仅是 T)。
ITMISS
TA贡献1871条经验 获得超8个赞
该dateutil.parser函数将解析该时区格式:
from dateutil.parser import parse
dt = parse('2020-10-23T11:50:19+00:00')
print(dt.date())
print(dt.time())
print(dt.tzinfo)
结果:
2020-10-23
11:50:19
tzutc()
如果您需要的话,您可以将单独的date,time和tzinfo对象组合成 a datetime,如下所示:
dt = datetime.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo)
print(dt)
结果:
2020-10-23 11:50:19+00:00
添加回答
举报
0/150
提交
取消