提问人:Erick 提问时间:10/4/2023 更新时间:10/4/2023 访问量:47
如何查找两个日期之间经过的天数?
How can I find the number of days that have elapsed between two dates?
问:
我已经创建了检查年份是否为闰年的函数,以及另一个检查日期在一年中的天数的函数。
我现在正在尝试创建一个函数来计算两个日期之间经过的天数。不幸的是,我的函数返回不一致的错误天数。这是我的功能is_leap_year
ordinal_date
def days_elapsed(year1: int, month1: int, day1: int, year2: int, month2: int, day2: int) -> int:
days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if year1 == year2:
if month1 == month2:
return day2 - day1
else:
ordinal_date1 = ordinal_date(year1, month1, day1)
ordinal_date2 = ordinal_date(year2, month2, day2)
return ordinal_date2 - ordinal_date1
else:
days_in_year1 = sum(days_in_month[month1:]) - day1
days_in_year2 = sum(days_in_month[:month2]) + day2 - 1
years_in_between = sum(366 if is_leap_year(year) else 365 for year in range(year1 + 1, year2))
total_days = days_in_year1 + days_in_year2 + years_in_between
return total_days
days_elapsed(1945, 1, 1, 2023, 10, 4)
返回 28,764 天,而不是 28,765 天,正确的已用天数 (364)。 返回 4292 天而不是 4294 天days_elapsed(2023, 1, 1, 2023, 12, 31)
days_elapsed(2012, 1, 1, 2023, 10, 4)
答:
0赞
nokla
10/4/2023
#1
days_elapsed(2012, 1, 1, 2023, 10, 4)
该函数目前计算提供的两个年份之间的闰年,但不考虑提供的年份之一可能是闰年。
2012年是闰年,也是第一年。您的函数仅考虑提供以下两年之间的闰年:
days_in_year1 = sum(days_in_month[month1:]) - day1
这个月< 2 年,所以会比它应该少一天。days_in_year1
修复此问题后,您将遇到只有一天的一致错误。这可以通过从 的计算中删除 来修复。-1
days_in_year2
days_in_year2 = sum(days_in_month[:month2]) + day2 - 1
.
我不知道你为什么要添加它,但我相信如果你把它改成:
days_in_year2 = sum(days_in_month[:month2]) + day2
评论
days_in_year1
days_in_year2
years_in_between
datetime.date