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
相关产品推荐
相关产品推荐

