python,datetime.date:两天之间的差异

python,datetime.date:两天之间的差异,python,Python,我在玩两个对象{@link} 我想计算它们之间的所有天数,假设日期1>=日期2,然后打印出来。下面是我想要实现的一个例子。但我认为这根本没有效率。有更好的方法吗 # i think +2 because this calc gives only days between the two days, # i would like to include them daysDiff = (dateTo - dateFrom).days + 2 while (daysDiff > 0):

我在玩两个对象{@link}

我想计算它们之间的所有天数,假设日期1>=日期2,然后打印出来。下面是我想要实现的一个例子。但我认为这根本没有效率。有更好的方法吗

# i think +2 because this calc gives only days between the two days, # i would like to include them daysDiff = (dateTo - dateFrom).days + 2 while (daysDiff > 0): rptDate = dateFrom.today() - timedelta(days=daysDiff) print rptDate.strftime('%Y-%m-%d') daysDiff -= 1 #我认为+2,因为这个计算只给出两天之间的天数, #我想把它们包括在内 daysDiff=(dateTo-dateFrom).days+2 而(daysDiff>0): rptDate=dateFrom.today()-timedelta(days=daysDiff) 打印rptDate.strftime(“%Y-%m-%d”) daysDiff-=1
我不认为这是特别低效的,但是您可以在没有while循环的情况下使它稍微干净一些:

delta = dateTo - dateFrom

for delta_day in range(0, delta.days+1): # Or use xrange in Python 2.x
    print dateFrom + datetime.timedelta(delta_day)
(另外,请注意在
日期打印或使用
str
如何为您免费生成
'%Y-%m-%d'
格式)

但是,如果您要一次性创建一个长的天数列表,而不是仅仅打印,那么这样做可能会效率低下,例如:

[dateFrom + datetime.timedelta(delta_day) for delta_day in range(0, delta.days+1)]
通过创建生成器而不是列表,可以很容易地纠正这一问题。在上述示例中,将
[…]
替换为
(…)
,或者:

def gen_days_inclusive(start_date, end_date):
    delta_days = (end_date - start_date).days
    for day in xrange(delta_days + 1):
        yield start_date + datetime.timedelta(day)

哪个更适合你的口味。

这是你能做的最好的。什么是低效的?你不喜欢什么?你可以点击答案投票下方的复选标记,将本·詹姆斯的答案标记为你的首选答案。谢谢你,本=)我绝对会采纳你的建议。我只是想,可能有一个库,我找不到,没有手动遍历就可以进行cal/date/datetime这样的转换!泰