Python日期解析遇ValueError:无法定位错误变量求排查
解决Python日期解析的ValueError问题
首先看你遇到的错误:ValueError: time data '12:00 AM IST on June 01, 2017' does not match format '%I:%M %p %Z on %B %d, %Y',核心问题出在时区缩写IST的解析上——Python原生的datetime.strptime默认不支持识别所有时区缩写,尤其是像IST这种对应多个时区(印度标准时间、爱尔兰标准时间等)的模糊缩写,它没办法自动匹配。
下面给你几个实用的解决办法:
方法1:手动移除时区缩写(最简单)
如果你的业务不需要保留时区信息,直接去掉字符串里的IST,再调整格式串即可:
import datetime # 针对你的排序代码修改 data['data'] = sorted(data['data'], key=lambda x: datetime.datetime.strptime(x['date']['pretty'].replace(' IST', ''), '%I:%M %p on %B %d, %Y'), reverse=False)
方法2:用第三方库自动解析
python-dateutil库的parse方法能智能识别绝大多数日期格式,包括这类带时区缩写的字符串,不用手动写格式串:
from dateutil import parser # 修改排序逻辑 data['data'] = sorted(data['data'], key=lambda x: parser.parse(x['date']['pretty']), reverse=False)
使用前需要先安装库:pip install python-dateutil
方法3:保留时区信息的进阶处理
如果需要处理时区转换,可以用pytz库配合自定义映射来绑定IST到具体时区(比如印度标准时间):
import datetime import pytz def parse_ist_date(date_str): # 拆分字符串分离时区部分 time_part, ampm, tz_abbr, rest = date_str.split(' ', 3) # 解析不带时区的日期部分 naive_dt = datetime.datetime.strptime(f"{time_part} {ampm} {rest}", '%I:%M %p on %B %d, %Y') # 绑定到印度标准时间 tz = pytz.timezone('Asia/Kolkata') return tz.localize(naive_dt) # 应用到排序 data['data'] = sorted(data['data'], key=lambda x: parse_ist_date(x['date']['pretty']), reverse=False)
内容的提问来源于stack exchange,提问作者Clyde Shelton
相关产品推荐
相关产品推荐

