Python3.6如何将带冒号时区的ISO时间串转为保留时区的datetime对象
问题原因
Python 3.6 中 strptime 方法的 %z 格式符仅支持无冒号的时区偏移格式(如 +0200),无法识别带冒号的 +02:00 格式,因此会出现转换失败的问题。
解决方案
方案1:无第三方依赖,预处理字符串后转换
只需移除时间字符串中时区部分的最后一个冒号,即可匹配 %z 的格式要求,转换后时区信息会完整保留:
import datetime time_str = "2021-07-04T00:00:00+02:00" # 移除时区段的冒号:把最后三位的`:XX`转为`XX` processed_time_str = time_str[:-3] + time_str[-2:] dt_obj = datetime.datetime.strptime(processed_time_str, "%Y-%m-%dT%H:%M:%S%z") print(dt_obj) # 输出示例:2021-07-04 00:00:00+02:00
方案2:使用第三方库直接解析
如果项目允许引入依赖,可以安装 python-dateutil 库,无需修改原字符串即可直接解析:
- 安装依赖:
pip install python-dateutil
- 转换代码:
from dateutil import parser time_str = "2021-07-04T00:00:00+02:00" dt_obj = parser.parse(time_str) print(dt_obj) # 输出示例:2021-07-04 00:00:00+02:00
补充说明
如果你后续升级到 Python 3.7 及以上版本,可以直接使用原生的 datetime.fromisoformat() 方法,无需预处理也无需第三方库,直接调用即可:
# Python 3.7+ 原生支持 import datetime dt_obj = datetime.datetime.fromisoformat("2021-07-04T00:00:00+02:00")
内容的提问来源于stack exchange,提问作者Satya Dev Yadav
相关产品推荐
相关产品推荐

