2010-08-24 66 views
3

我玩弄两个对象之间的差异{@link http://docs.python.org/library/datetime.html#datetime.date}蟒蛇,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

这关于你能做的最好的。什么是低效?你不喜欢什么? – 2010-08-25 02:42:24

+0

您可能希望通过单击答案投票下方的复选标记将Ben James的答案标记为您的首选答案。 – tzot 2010-09-23 13:58:26

回答

5

我不认为这是特别低效的,但是你可以把没有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) 

(另请注意,在date打印或使用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) 

哪种适合你的语法口感更好。

+0

谢谢你本=)我绝对会用你的建议。我只是以为可能有一个库,我无法找到,没有手动遍历cal/date/datetime这样的转换。 – Krolique 2010-08-25 03:55:42

+1

本,一次又一次我觉得这非常有用! TY – Krolique 2011-01-20 14:33:48