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

4 投票
1 回答
9733 浏览
提问于 2025-04-16 03:15

我正在玩两个对象 {@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 个回答

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)

看哪个更符合你的代码风格。

撰写回答