You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带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时间格式,无需手动处理:

  1. 先安装库:
pip install python-dateutil
  1. 解析代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:50:23