Python 打印两个日期之间的全天日期

Python 打印两个日期之间的全天日期,python,datetime,Python,Datetime,例如: from datetime import date d1 = date(2008,8,15) d2 = date(2008,9,15) 我正在寻找简单的代码来打印这段时间内的所有日期: 2008,8,15 2008,8,16 2008,8,17 ... 2008,9,14 2008,9,15 谢谢我想到了这个: from datetime import date, timedelta sdate = date(2008, 8, 15) # start da

例如:

from datetime import date

d1 = date(2008,8,15)
d2 = date(2008,9,15)
我正在寻找简单的代码来打印这段时间内的所有日期:

2008,8,15  
2008,8,16  
2008,8,17  
...  
2008,9,14  
2008,9,15
谢谢

我想到了这个:

from datetime import date, timedelta

sdate = date(2008, 8, 15)   # start date
edate = date(2008, 9, 15)   # end date

delta = edate - sdate       # as timedelta

for i in range(delta.days + 1):
    day = sdate + timedelta(days=i)
    print(day)
输出:

2008-08-15
2008-08-16
...
2008-09-13
2008-09-14
2008-09-15

你的问题要求在这两个日期之间,但我相信你的意思是包括开始点和结束点,所以它们包括在内。要删除结束日期,请删除范围函数末尾的“+1”。要删除开始日期,请在范围函数的开头插入1参数。

使用列表:

import datetime

begin = datetime.date(2008, 8, 15)
end = datetime.date(2008, 9, 15)

next_day = begin
while True:
    if next_day > end:
        break
    print next_day
    next_day += datetime.timedelta(days=1)
from datetime import date, timedelta

d1 = date(2008,8,15)
d2 = date(2008,9,15)

# this will give you a list containing all of the dates
dd = [d1 + timedelta(days=x) for x in range((d2-d1).days + 1)]

for d in dd:
    print d

# you can't join dates, so if you want to use join, you need to
# cast to a string in the list comprehension:
ddd = [str(d1 + timedelta(days=x)) for x in range((d2-d1).days + 1)]
# now you can join
print "\n".join(ddd)

基本上与格林戈·苏亚夫的答案相同,但带有发电机:

from datetime import datetime, timedelta


def datetime_range(start=None, end=None):
    span = end - start
    for i in xrange(span.days + 1):
        yield start + timedelta(days=i)
然后您可以按如下方式使用它:

In: list(datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)))
Out: 
[datetime.datetime(2014, 1, 1, 0, 0),
 datetime.datetime(2014, 1, 2, 0, 0),
 datetime.datetime(2014, 1, 3, 0, 0),
 datetime.datetime(2014, 1, 4, 0, 0),
 datetime.datetime(2014, 1, 5, 0, 0)]
或者像这样:

In []: for date in datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)):
   ...:     print date
   ...:     
2014-01-01 00:00:00
2014-01-02 00:00:00
2014-01-03 00:00:00
2014-01-04 00:00:00
2014-01-05 00:00:00

看看Hello all,我试过了,但它只打印最后一天,我需要完整的日期列表\u list=[]结果=d1+td(days=i)日期\u列表。追加(结果)打印(结果)它只打印最后一天,如何解决这个问题?听起来你的循环有点错误。请用您的
范围(delta.days)
的值回复。带有days的Timedelta始终会增加24小时的倍数。因此,如果您通过开关切换到日间照明节省时间,您将被关闭一个小时(每个时间为凌晨1点)。往另一个方向走,你甚至有不同的一天,每个晚上11点。使用UTC的原因之一…它使用Date类,所以时间不是一个因素。@GringoSuave这在闰年不起作用,它添加了2月29日,即使在闰年,你能修复吗?我更喜欢生成器的想法,它总是可以作为代码中某个地方的助手函数;然而,它肯定缺乏类型和健全性检查
start
end
参数的默认值设置为None会询问错误。
对于xrange中的i(span.days+1):
会导致错误,必须将其更改为
或range中的i(span.days+1):
另一个答案是Python 3上的生成器,此Python 2代码现在已过时。
In []: for date in datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)):
   ...:     print date
   ...:     
2014-01-01 00:00:00
2014-01-02 00:00:00
2014-01-03 00:00:00
2014-01-04 00:00:00
2014-01-05 00:00:00