如何用python计算一年中两个日期之间的天数

2024-05-19 22:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

date 1 : 1 january 2000  
date 2 : 17 november 2006  

我想知道2000年,2001年,…2006年,日期1和日期2之间有多少天 因此,我需要返回这样的内容(不管它是否在列表中或其他内容中):
2000年:365年,2001年:365年,…,2006年:320年

我在网上找过类似的东西,但这只是计算两个日期之间的天数/月数/年数的方法


Tags: 方法内容列表date天数januarynovember年数
3条回答
>>> 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),否则您将在结束时休息一天。固定的。但这取决于您是要包含它还是排除它。

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)

嗯,试试这样的:

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

相关问题 更多 >