例如:
date 1 : 1 january 2000
date 2 : 17 november 2006
Run Code Online (Sandbox Code Playgroud)
我想知道有多少天在今年的1日和2日之间的2000,2001,...,2006年,所以我需要的东西,返回这样的事情(不,如果它在列表或重要的东西):
2000:365,2001:365,...,2006:320
我在互联网上寻找过这样的东西但是只想办法计算两个日期之间的天数/月/年
嗯,尝试这样的事情:
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]
Run Code Online (Sandbox Code Playgroud)
没有测试过这个,可能是一些一个一个错误; 确保它符合您的期望.
编辑:更正range()调用的边界,正确处理year1 == year2
>>> 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
Run Code Online (Sandbox Code Playgroud)
更新:您可能应该datetime.timedelta(1)在结束日期添加一个,因为否则您将在最后一天离开.固定.但这取决于您是要包含它还是排除它.