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

时间:2010-08-24 21:28:18

标签: python

我正在玩2个对象{@link http://docs.python.org/library/datetime.html#datetime.date}

我想计算它们之间的所有日期,假设日期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

1 个答案:

答案 0 :(得分:6)

我认为这不是特别低效,但如果没有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上打印或使用date为您免费生成'%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)

更适合您的语法风格。