You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:04:27