Python, datetime.date: 两天之间的差异
我正在玩两个对象 {@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)
看哪个更符合你的代码风格。