Python日期比较If语句不生效问题求助 需支持工作日天数计算
问题排查
核心问题1:判断条件逻辑顺序错误
你当前的判断分支是先校验date_only < minus_2_days,再校验date_only < minus_4_days、date_only < minus_7_days,这个顺序完全不符合逻辑:
- 所有满足
小于减4天、小于减7天的日期,肯定同时满足小于减2天,所以后两个elif分支永远不会被触发 - 正确的逻辑应该是先判断时间跨度更大的条件,再判断跨度小的,也就是先校验是否小于7天,再4天,再2天。
核心问题2:比较运算符不符合需求
你当前测试用例中,date_only = 2021-06-01,minus_2_days = 2021-06-01,你用的是<(严格小于),相等的场景不会触发判断,自然不会进入任何分支。如果你的需求是「早于等于2天/4天/7天」,把运算符改成<=即可。
修正后的基础版本代码(自然日计算)
import datetime from datetime import timedelta def Calc_Date(datestring): date_time_ticket = datetime.datetime.strptime(datestring, '%d-%b-%Y %H:%M:%S') date_today = datetime.date.today() date_only = date_time_ticket.date() minus_2_days = date_today - timedelta(days=2) minus_4_days = date_today - timedelta(days=4) minus_7_days = date_today - timedelta(days=7) # 调整判断顺序 + 修正运算符 if date_only <= minus_7_days: print('lower than 7') elif date_only <= minus_4_days: print('lower than 4') elif date_only <= minus_2_days: print('lower than 2')
工作日统计实现方案
如果需要仅统计工作日,可以用datetime.date自带的weekday()方法判断:返回值0-4对应周一到周五,5、6对应周六周日,计算间隔天数的时候跳过周末即可,示例逻辑如下:
def count_workdays(start_date, end_date): workday_count = 0 current_date = start_date while current_date < end_date: if current_date.weekday() < 5: # 周一到周五算工作日 workday_count +=1 current_date += timedelta(days=1) return workday_count
调用时传入date_only和date_today,判断返回的工作日数是否大于等于2/4/7即可。
内容的提问来源于stack exchange,提问作者Gabriel Snikuer
相关产品推荐
相关产品推荐

