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

时间:2017-11-17 05:12:18

标签: function datetime

我想写一个名为days_between的函数,它接受六个整数(year1,month1,day1,year2,month2,day2)并返回从较早日期(year1-month1-day1)到较晚日期的天数( YEAR2-MONTH2-DAY2)。如果任一日期无效,则函数应返回0.为了能够查看给定日期是否有效,我编写了一个名为is_valid_date的函数,如下所示:

def is_valid_date(year, month, day):
ndays = mdays[month] + (month == February and isleap(year))
if datetime.MINYEAR <= year <= datetime.MAXYEAR:
    if 1 <= month <=12:
        if 1 <= day <= 31 and 1 <= day <= ndays:
            return True
        else: return False
else: return False

如果date有效则返回True,如果无效则返回False。 在我的days_between函数中,我想首先检查日期是否有效,如果是,则返回它们之间的天数。如果日期无效,则返回0.此外,如果第二个日期早于第一个日期,则该函数应返回0。 这就是我所做的:

def days_between(year1, month1, day1, year2, month2, day2):
     date1 = date(year1, month1, day1)
     date2 = date(year2, month2, day2)
     diff = date2 - date1
     if is_valid_date(year1, month1, day1) and is_valid_date(year2, month2, day2):
          return diff
     elif date2 < date1:
          return 0
     else: 
          return 0

现在用日期测试此函数时:

print(days_between(2026, 1, 3, 2025, 6, 3))

它返回负数-214天,0:00:00,因为它假设从第二个日期出现之前返回0。此外,如果我测试无效日期:

print(days_between(2026, 1, 34, 2025, 6, 3))

当它假设返回0时会返回错误消息,因为它是无效的日期:

 line 39, in days_between
 date1 = date(year1, month1, day1)
 ValueError: day is out of range for month

有人可以帮我验证这个功能吗?如果我的代码出现问题我无法帮助我。

1 个答案:

答案 0 :(得分:0)

经过多次试验后,我使用了日历库才能找到结果。这是代码:

def is_valid_date(year, month, day):
    try:
       days = calendar.monthrange(year, month)
       days1 = days[1]
       if datetime.MINYEAR <= year <= datetime.MAXYEAR:
           if 1<= month <= 12:
              if 1<= day <= days1:  
                  return True
              else:     
                  return False
       else: return False
    except ValueError:
       return False

找出我所做的日期之间的区别:

def days_between(year1, month1, day1, year2, month2, day2):
    try:
        date1= datetime.date(year1, month1, day1)
        date2= datetime.date(year2, month2, day2)
        dif = date2 - date1
        diff = dif.days
        if diff < 0:
            return 0   
    except ValueError:
        return 0
    else: 
        return diff

如果有人有其他方法,请与我分享。