Python日期间隔天数计算函数返回错误结果,如何修复?
修复
days_elapsed函数的日期计算错误 你的days_elapsed函数在跨年份计算时存在两处核心错误,导致结果偏差:
未处理闰年的月份天数
手动定义的days_in_month是平年的月份天数,当涉及闰年时,2月的29天未被计入,直接导致闰年年份的剩余天数或已过天数少算1天。days_in_year2计算逻辑错误
代码中sum(days_in_month[:month2]) + day2 - 1多减了1天。正确逻辑应为前month2-1个月的总天数加上day2,你的写法等价于前month2个月的总天数加day2-1,直接少算1天。
另外,既然你已经实现了处理闰年的ordinal_date函数,完全可以复用它来简化计算,避免手动计算月份总和的错误。
修复后的代码
def days_elapsed(year1: int, month1: int, day1: int, year2: int, month2: int, day2: int) -> int: if year1 == year2: # 同一年直接使用ordinal_date的差值 ordinal_date1 = ordinal_date(year1, month1, day1) ordinal_date2 = ordinal_date(year2, month2, day2) return ordinal_date2 - ordinal_date1 else: # 计算year1中从目标日期到年底的剩余天数 total_days_year1 = 366 if is_leap_year(year1) else 365 days_remaining_year1 = total_days_year1 - ordinal_date(year1, month1, day1) # 计算year2中从年初到目标日期的已过天数 days_passed_year2 = ordinal_date(year2, month2, day2) # 计算中间所有年份的总天数 years_between_total = sum(366 if is_leap_year(y) else 365 for y in range(year1 + 1, year2)) # 总和即为间隔天数 return days_remaining_year1 + days_passed_year2 + years_between_total
测试验证
days_elapsed(1945, 1, 1, 2023, 10, 4)返回正确的28765天;days_elapsed(2012, 1, 1, 2023, 10, 4)返回正确的4294天;- 同一年的测试用例
days_elapsed(2023, 1, 1, 2023, 12, 31)仍返回正确的364天。
内容的提问来源于stack exchange,提问作者Erick
相关产品推荐
相关产品推荐

