如何查找两个日期之间经过的天数?

How can I find the number of days that have elapsed between two dates?

提问人:Erick 提问时间:10/4/2023 更新时间:10/4/2023 访问量:47

问:

我已经创建了检查年份是否为闰年的函数,以及另一个检查日期在一年中的天数的函数。 我现在正在尝试创建一个函数来计算两个日期之间经过的天数。不幸的是,我的函数返回不一致的错误天数。这是我的功能is_leap_yearordinal_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)

Python 数组 列表 函数

评论

1赞 raddevus 10/4/2023
在这里找到你的答案了吗 => stackoverflow.com/questions/8419564/...这里还有一个=>stackoverflow.com/questions/151199/......
0赞 Scott Hunter 10/4/2023
您能否确定这些示例(、和/或)的计算部分有误?days_in_year1days_in_year2years_in_between
0赞 larsks 10/4/2023
这只是一个练习吗?因为最简单的解决方案是创建两个对象并减去它们。datetime.date
0赞 Erick 10/4/2023
这只是一个练习,我必须使用其他两个函数(is_leap_year 和 ordinal_date),所以我不能在这里使用 datetime.date。

答:

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


修复此问题后,您将遇到只有一天的一致错误。这可以通过从 的计算中删除 来修复。-1days_in_year2

days_in_year2 = sum(days_in_month[:month2]) + day2 - 1.

我不知道你为什么要添加它,但我相信如果你把它改成:

days_in_year2 = sum(days_in_month[:month2]) + day2