![](/img/trans.png)
[英]Python: Calculate number of days between two dates in different formats?
[英]How to Calculate the number of days in the year(s) between 2 dates in python
例如:
date 1 : 1 january 2000
date 2 : 17 november 2006
我想知道 2000 年、2001 年、...、2006 年的日期 1 和日期 2 之间有多少天,所以我需要返回类似这样的东西(不管它是否在列表或其他东西中):
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]
尚未对此进行测试,可能是一些错误; 确保它符合您的预期。
编辑:更正 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
更新:您可能应该将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)
使用此伪代码查看一年是否为闰年
if year modulo 400 is 0
then is_leap_year
else if year modulo 100 is 0
then not_leap_year
else if year modulo 4 is 0
then is_leap_year
else
not_leap_year
创建所有闰年和不是闰年的列表。
你可以通过这样做简单地得到一些东西:
>>> from datetime import datetime
>>> d1 = datetime.strptime("30 Nov 00", "%d %b %y")
>>> (datetime.now() - d1).days
3907
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.