带Z后缀的时间字符串转Python datetime对象失败,求解决方法
解决方案
问题原因
datetime.strptime的%f格式符仅支持最多6位微秒,而你的时间戳包含7位微秒,触发格式不匹配错误。datetime.fromisoformat在Python 3.10及更早版本不支持解析带Z后缀的ISO格式;3.11+版本虽支持Z,但对超过6位的微秒仍会报错。
解决方法
方法一:手动截断微秒后用strptime
直接把7位微秒截断到6位,符合Python datetime的微秒存储限制,再用标准格式化解析:
from datetime import datetime s = "2023-02-02T21:05:07.2207121Z" # 截断最后一位微秒,保留Z后缀 processed_str = s[:-2] + s[-1] dt = datetime.strptime(processed_str, "%Y-%m-%dT%H:%M:%S.%fZ") print(dt)
方法二:使用python-dateutil自动解析
第三方库python-dateutil能兼容各种ISO时间格式,无需手动处理:
- 先安装库:
pip install python-dateutil
- 解析代码:
from dateutil.parser import parse s = "2023-02-02T21:05:07.2207121Z" dt = parse(s) print(dt)
方法三:Python 3.11+ 适配处理
如果使用Python 3.11及以上版本,可以先将Z替换为+00:00(UTC时区的标准格式),再处理微秒后用fromisoformat:
from datetime import datetime s = "2023-02-02T21:05:07.2207121Z" # 替换Z为UTC时区格式,截断7位微秒到6位 iso_str = s.replace("Z", "+00:00") if "." in iso_str: date_part, rest = iso_str.split(".", 1) microsec_part, tz_part = rest[:6], rest[6:] iso_str = f"{date_part}.{microsec_part}{tz_part}" dt = datetime.fromisoformat(iso_str) print(dt)
内容的提问来源于stack exchange,提问作者Michael Moreno
相关产品推荐
相关产品推荐

