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

Python日期格式匹配错误求助:'1/1/21'与'%m/%d/%Y'不匹配问题

Python日期格式匹配错误求助:'1/1/21'与'%m/%d/%Y'不匹配问题

嗨,我仔细看了你的代码和报错信息,一下子就找到问题所在啦!

错误根源分析

你看到的报错Error: time data '1/1/21' does not match format '%m/%d/%Y',并不是来自处理Excel表格日期的parse_date函数,而是来自你解析用户输入的fecha_inicio和fecha_fin的代码段!

看这段代码:

fecha_inicio = datetime.strptime(str(self.fecha_inicio.get()), "%m/%d/%Y")
fecha_fin = datetime.strptime(str(self.fecha_fin.get()), "%m/%d/%Y")

你在这里硬编码要求输入的日期必须是四位年份的%m/%d/%Y格式(比如01/01/2021),但用户实际输入的是两位年份的1/1/21,自然就匹配失败了。而你明明写了能处理多种日期格式的parse_date函数,却没把它用在用户输入的日期上,这就白忙活啦!

解决方案

1. 用parse_date处理用户输入的日期

把解析起始和结束日期的代码,换成调用你自己写的parse_date函数,这样它就能自动识别两位或四位年份的格式:

# 替换原来的fecha_inicio和fecha_fin解析代码
fecha_inicio = self.parse_date(str(self.fecha_inicio.get()))
fecha_fin = self.parse_date(str(self.fecha_fin.get()))

2. 补充Excel里的日期格式支持

你提到Excel里的日期格式是%d%m%y,不过从报错里的1/1/21来看应该是带斜杠的%d/%m/%y?不管怎样,把这个格式也加入parse_date的格式列表里,确保能兼容Excel里的日期:

def parse_date(self, date_str):
    # 加入你提到的%d/%m/%y格式,同时保留原有格式支持
    for fmt in ("%m/%d/%Y", "%m/%d/%y", "%d/%m/%Y", "%d/%m/%y"):
        try:
            return datetime.strptime(date_str, fmt)
        except ValueError:
            continue
    raise ValueError(f"Date format for '{date_str}' is not supported")

3. 额外优化:直接处理Excel返回的datetime对象

xlwings读取Excel日期单元格时,有时候会直接返回datetime类型的对象,而不是字符串。你可以在处理表格行日期的时候加个判断,避免不必要的字符串解析:

# 替换query_data里的row_fecha解析代码
row_value = row[0].value
if isinstance(row_value, datetime):
    row_fecha = row_value
else:
    row_fecha = self.parse_date(str(row_value))

这样修改后,不管用户输入的是两位还是四位年份的日期,也不管Excel里的日期是月/日/年还是日/月/年格式,都能正确解析啦!

备注:内容来源于stack exchange,提问作者Santiago Hernandez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:53:03