如何使用strptime解析带时分分隔的UTC偏移量时间字符串?
解决带冒号时区偏移的字符串转datetime问题
哈哈,这个坑我踩过!Python标准库的strptime里的%z指令确实只认+HHMM这种不带冒号的时区格式,碰到+HH:MM的情况就得绕个小弯,给你分享几个实用的解决办法:
手动修正时区格式(兼容所有Python版本)
最简单的思路就是把字符串里时区部分的冒号去掉,转换成%z能识别的格式。具体操作是截取字符串到时区冒号前的部分,再拼接冒号后的两位数字:from datetime import datetime time_str = "2018-04-03 02:59:59+00:00" # 去掉时区里的冒号:把+00:00改成+0000 modified_time_str = time_str[:-3] + time_str[-2:] dt_obj = datetime.strptime(modified_time_str, "%Y-%m-%d %H:%M:%S%z") print(dt_obj) # 输出:2018-04-03 02:59:59+00:00用Python 3.7+原生的
fromisoformat(最简洁)
从Python 3.7开始,datetime类新增了fromisoformat方法,它原生支持带冒号的时区偏移格式,连格式字符串都不用写,直接解析:from datetime import datetime time_str = "2018-04-03 02:59:59+00:00" dt_obj = datetime.fromisoformat(time_str) print(dt_obj) # 输出:2018-04-03 02:59:59+00:00这个方法最省心,如果你用的Python版本在3.7及以上,优先选它。
借助第三方库
python-dateutil(万能格式解析)
如果你需要兼容更老的Python版本,或者要处理各种奇奇怪怪的时间格式,python-dateutil的parser模块能自动识别几乎所有常见的时间格式,包括带冒号的时区:
先安装库:pip install python-dateutil然后解析:
from dateutil import parser time_str = "2018-04-03 02:59:59+00:00" dt_obj = parser.parse(time_str) print(dt_obj) # 输出:2018-04-03 02:59:59+00:00
内容的提问来源于stack exchange,提问作者carla
相关产品推荐
相关产品推荐

