Python如何将带特殊字符的日期字符串转换为datetime对象
错误原因分析
- 第一个
strptime调用存在两个明显问题:- 格式符误用:表示月份的格式符为小写
%m,你使用了大写%M,而%M是分钟的对应格式符,同一格式符重复出现触发了分组重定义的报错。 - 格式串和原字符串不匹配:待解析的日期字符串包含
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
相关产品推荐
相关产品推荐

