Python日期比较未返回正确结果,是否遗漏关键细节?
问题根源与解决方案
你的代码核心错误是将日期对象转换成了字符串进行比较,而非直接使用日期类型对象做判断。
字符串的比较规则是按字符的ASCII顺序逐位对比,比如假设今天是10.09.2024,字符串"25.12.2022"和"10.09.2024"比较时,第一个字符'2'的ASCII值大于'1',所以会被判定为"25.12.2022" > "10.09.2024",这和实际的日期先后逻辑完全相悖,导致两个判断都输出not overdue。
修正后的代码
保留date或datetime类型对象进行比较,不要转换为字符串:
import datetime # 解析字符串为date对象(仅保留日期部分) date1 = datetime.datetime.strptime("25.12.2022", '%d.%m.%Y').date() date2 = datetime.datetime.strptime("25.12.2025", '%d.%m.%Y').date() today = datetime.date.today() if date1 < today: print("OVERDUE") else: print("not overdue") if date2 < today: print("OVERDUE") else: print("not overdue")
说明
datetime.strptime()生成的是datetime对象,调用.date()可以提取纯粹的日期部分,和datetime.date.today()返回的date对象属于同一类型,它们的比较会遵循实际的日期先后逻辑,能正确判断任务是否逾期。
内容的提问来源于stack exchange,提问作者epv
相关产品推荐
相关产品推荐

