繁体   English   中英

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

[英]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

创建所有闰年和不是闰年的列表。

  1. 将这两天转换为纪元以来的秒数(即 1970 年 1 月 1 日午夜)
  2. 减去。
  3. 进行除法以将秒数转换为天数以获得差异。

你可以通过这样做简单地得到一些东西:

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM