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

Python如何将带特殊字符的日期字符串转换为datetime对象

错误原因分析

  • 第一个strptime调用存在两个明显问题:
    1. 格式符误用:表示月份的格式符为小写%m,你使用了大写%M,而%M是分钟的对应格式符,同一格式符重复出现触发了分组重定义的报错。
    2. 格式串和原字符串不匹配:待解析的日期字符串包含T分隔符和末尾的Z标识,你的格式串中没有对应匹配这两个字符,修正格式符后仍会报错。
  • datetime.fromisoformat调用失败的原因:Python 3.11之前的标准库版本中,fromisoformat不支持末尾带Z后缀的ISO 8601格式,仅能解析无时区后缀、或带±HH:MM格式时区后缀的字符串。

可行解决方案

方案1:修正strptime的格式串

直接按照待解析字符串的结构写对格式符即可:

from datetime import datetime
date_string = "2021-07-07T02:27:00Z"
# 注意月份用%m,字符串中的T和Z要原样写到格式串中
dt = datetime.strptime(date_string, '%Y-%m-%dT%H:%M:%SZ')
print(dt)

方案2:兼容低版本Python的fromisoformat写法

将末尾的Z替换为标准的UTC时区偏移表示+00:00即可适配3.11之前的版本,还能正确保留时区信息:

from datetime import datetime
date_string = "2021-07-07T02:27:00Z"
dt = datetime.fromisoformat(date_string.replace('Z', '+00:00'))
print(dt)

方案3:使用Python 3.11+版本

如果你的运行环境可以升级Python版本,3.11及以上版本的fromisoformat已经原生支持带Z后缀的ISO 8601格式,直接调用即可正常解析:

from datetime import datetime
date_string = "2021-07-07T02:27:00Z"
dt = datetime.fromisoformat(date_string)
print(dt)

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:54:02