Python使用strptime解析+0时区Datetime串报格式不匹配错误
问题根因
报错的核心问题出在%z格式符的匹配规则上:
Python 标准库的datetime.strptime对%z(UTC时区偏移)的格式有强制要求:
- 可识别的偏移格式必须是
±HHMM结构(Python 3.7+ 额外支持±HH:MM的带冒号写法),偏移部分至少要包含4位数字,对应2位小时偏移+2位分钟偏移 - 你传入的时间字符串里,时区部分是
+0,只有1位数字,完全达不到%z的匹配要求,自然会抛出格式不匹配的错误。
你写的%b %d %Y %I: 这部分格式和字符串Dec 03 2020 01: 的结构是完全对应的,这部分没有问题。
修复方法
你没法直接用原生%z匹配这种非标准的1位偏移写法,需要先对原始字符串做预处理,把偏移部分补全为标准格式再解析,参考代码:
from datetime import datetime raw_time = "Dec 03 2020 01: +0" # 将非标准的+0替换为UTC+0对应的标准偏移写法+0000 fixed_time = raw_time.replace("+0", "+0000") dt_obj = datetime.strptime(fixed_time, '%b %d %Y %I: %z')
运行后可以得到正确的datetime对象:2020-12-03 01:00:00+00:00。
如果你的实际场景里可能出现其他个位数偏移(比如+8代表东八区),建议用正则单独捕获偏移部分,自动补零到4位后再拼接解析,避免硬编码替换出现匹配错误。
内容的提问来源于stack exchange,提问作者codedor
相关产品推荐
相关产品推荐

