Python 计算两个给定日期之间的天数

Python 计算两个给定日期之间的天数,python,Python,此编码用于查找日期之间的天数。我的编码不适用于我在代码的最后一个注释中提到的情况,请指定我的错误注释:y1、m1、d1->开始日期和y2、m2、d2->结束日期 def days_between_dates(y2,m2,d2,y1,m1,d1): days = 0 tot = 0 while not(y1==y2 and m1==m2 and d1==d2): days = days + 1 d1 = d1+1 if((m1

此编码用于查找日期之间的天数。我的编码不适用于我在代码的最后一个注释中提到的情况,请指定我的错误注释:y1、m1、d1->开始日期和y2、m2、d2->结束日期

def days_between_dates(y2,m2,d2,y1,m1,d1):
    days = 0
    tot = 0
    while not(y1==y2 and m1==m2 and d1==d2):
        days = days + 1
        d1 = d1+1
        if((m1 == 4 or m1 == 6 or m1 == 9 or m1 == 11) and d1 == 30):
            d1 = 0
            m1 = m1+1
        if(d1 == 31):
            d1 = 0
            m1 = m1+1
        if (((y1%4)!=0) and m1 == 2 and d1==28):
            d1 = 0
            m1 = m1+1
        else:
            if(m1 == 2 and d1 == 29):
                d1 = 0
                m1 = m1+1
        if(m1>12):
            m1 = 1
            y1 = y1 + 1
        if(y1==y2 and m1==m2 and d1==d2):
            return days
            break
    return days
print days_between_dates(2011,1,1,2010,1,1)
print days_between_dates(2013,1,1,2012,1,1)
#print days_between_dates(2012,2,29,2012,2,28)

避免重新发明轮子,而是使用datetime模块:

from datetime import date

def days_between_dates(y2, m2, d2, y1, m1, d1):
    return (date(y2, m2, d2) - date(y1, m1, d1)).days
至于您的错误:您使用的是基于0的日期算法;每当你到了月底,你就切换到下个月的第0天。这意味着,如果y2、m2、d1日是一个月的最后一天,则永远不会达到结束条件;在测试2012年2月29日之前,您已经将日期更改为2012年3月0日

使用基于1的算术,并且仅当您超过该月的最后一天时才更改该月

注意,您可以测试元组之间的相等性,无需对每个元素进行完整测试。您的闰年计算也需要一些改进:

def is_leap_year(year):
    if year % 400 == 0:
        return True
    if year % 100 == 0:
        return False
    return year % 4 == 0

def days_between_dates(y2, m2, d2, y1, m1, d1):
    days = 0
    isleapyear = is_leap_year(y1)

    while (y1, m1, d1) != (y2, m2, d2):
        days += 1
        d1 += 1

        if (m1 == 2 and d1 == (30 if isleapyear else 29) or
            m1 in (4, 6, 9, 11) and d1 == 31 or d1 == 32):
            d1 = 1
            m1 += 1

        if m1 == 13:
            m1 = 1
            y1 += 1
            isleapyear = is_leap_year(y1)

    return days

千倍于此。999,如果你差一点。Udacity的CS101分级机允许吗?这与OP昨天收到的答案完全相同,并且似乎不喜欢。@user2649815错误在于没有使用已经创建并提供的Pythonmodules@Mark:有时,计算机课程希望您通过自己进行计算来学习这些基础知识。复制已从SO中删除。