生成间隔之间的日期时间列表


问题内容

给定两个日期时间(start_dateend_date),我想生成这两个日期之间其他日期时间的列表,新的日期时间以可变的间隔分开。例如,在2011-10-10和2011-12-12之间每4天一次,或者从现在到明天19
p.m之间每8小时一次。

也许大致等同于Dateperiod PHP类。

用Python完成此操作的最有效方法是什么?


问题答案:

用途datetime.timedelta

from datetime import date, datetime, timedelta

def perdelta(start, end, delta):
    curr = start
    while curr < end:
        yield curr
        curr += delta

>>> for result in perdelta(date(2011, 10, 10), date(2011, 12, 12), timedelta(days=4)):
...     print result
...
2011-10-10
2011-10-14
2011-10-18
2011-10-22
2011-10-26
2011-10-30
2011-11-03
2011-11-07
2011-11-11
2011-11-15
2011-11-19
2011-11-23
2011-11-27
2011-12-01
2011-12-05
2011-12-09

适用于日期和日期时间对象。您的第二个示例:

>>> for result in perdelta(datetime.now(),
...         datetime.now().replace(hour=19) + timedelta(days=1),
...         timedelta(hours=8)):
...     print result
... 
2012-05-21 17:25:47.668022
2012-05-22 01:25:47.668022
2012-05-22 09:25:47.668022
2012-05-22 17:25:47.668022