如何在Python中计算两个日期之间的天数总和
比如说:
date 1 : 1 january 2000
date 2 : 17 november 2006
我想知道在2000年到2006年之间,日期1和日期2之间有多少天。所以我需要一个能返回类似这样的结果的东西(不管是列表还是其他形式):
2000年:365天,2001年:365天,……,2006年:320天
我在网上找过类似的东西,但只找到了一些计算两个日期之间天数、月份或年份的方法。
7 个回答
4
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能会在使用某个函数时,发现它的表现和预期不一样。这种情况可能是因为我们没有正确地传递参数,或者是对这个函数的使用方法不够了解。
此外,调试代码也是一个很重要的技能。调试就是找出代码中出错的地方,然后修正它。很多时候,我们需要仔细查看错误信息,这些信息通常会告诉我们出错的行数和原因。通过这些提示,我们可以一步步找到问题所在。
总之,编程是一门需要不断学习和实践的技能。遇到问题时,不要气馁,仔细分析,寻找解决方案,慢慢就会变得越来越熟练。
from datetime import date
DATE_END = date(2006, 11, 17)
def get_days(date_start):
return (DATE_END - date_start).days
starting_dates = [
date(2000, 1, 1),
date(2001, 1, 1),
date(2002, 1, 1),
]
print map(get_days, starting_dates)
6
>>> start_date = datetime.datetime(2006, 7, 3)
>>> end_date = datetime.datetime(2012, 12, 21)
>>> years = range(start_date.year, end_date.year + 1)
>>> start, end = start_date, end_date + datetime.timedelta(1)
>>> for year in years:
... year_start = datetime.datetime(year, 1, 1, 0, 0)
... year_end = datetime.datetime(year + 1, 1, 1, 0, 0)
... print(year, min(end, year_end) - max(start, year_start))
...
2006 182 days, 0:00:00
2007 365 days, 0:00:00
2008 366 days, 0:00:00
2009 365 days, 0:00:00
2010 365 days, 0:00:00
2011 365 days, 0:00:00
2012 356 days, 0:00:00
更新:你可能需要在结束日期后加上一个 datetime.timedelta(1)
,因为如果不加的话,最后一天会算错。这个问题已经修正了。不过这要看你是想把最后一天算进去还是不算进去。
8
嗯,可以试试这样做:
import datetime, calendar
date1 = datetime.date(year1, month1, day1) # month and day are 1-base
date2 = datetime.date(year2, month2, day2)
days_in_first_year = (datetime.date(year1,12,31)-date1).days
days_in_last_year = (date2 - datetime.date(year2, 1, 1)).days
if year1 != year2:
n_days_list = [days_in_first_year]
for year in range(year1+1, year2): n_days_list.append(365 + (1*calendar.isleap(year)))
n_days_list.append(days_in_last_year)
else: n_days_list = [days_in_first_year + days_in_last_year]
这个我还没测试过,可能会有一些越界错误;确保它的结果是你想要的。
补充:修正一下range()函数的边界,正确处理year1等于year2的情况。