Python strptime转换含冒号时区时间报格式不匹配错误如何解决?
问题根因
Python 3.11 以下版本中,strptime 方法的 %z 格式符仅支持无冒号的时区偏移格式(如 +0400),你传入的时间字符串时区部分为带冒号的 +04:00,和指定的格式串不匹配,因此抛出该报错。
解决方案
你可以根据自己的运行环境选择以下任意一种方案修复:
- 方案1:升级Python版本到3.11及以上。该版本开始
%z已原生支持带冒号的时区偏移格式,原有代码无需任何修改即可正常运行。 - 方案2:兼容低版本Python,预处理时间字符串去掉时区部分的冒号,修改后的代码如下:
from datetime import datetime def time_converter(time): if time is None: time = '' else: # 去除时区偏移中的冒号,例:将+04:00转换为+0400 if ':' in time[-3:]: time = time[:-3] + time[-2:] time_obj = datetime.strptime(time, '%Y-%m-%dT%H:%M:%S.%f%z') time = time_obj.strftime('%Y-%m-%d %H:%M:%S') return time
- 方案3:使用第三方库
python-dateutil自动解析时间格式,无需手动匹配格式串,适配性更强。首先执行pip install python-dateutil安装依赖,再修改代码如下:
from dateutil import parser from datetime import datetime def time_converter(time): if time is None: time = '' else: time_obj = parser.parse(time) time = time_obj.strftime('%Y-%m-%d %H:%M:%S') return time
内容的提问来源于stack exchange,提问作者shotikoj
相关产品推荐
相关产品推荐

