试试这个:
from datetime import datetime
from dateutil.relativedelta import relativedelta
def date_range(start_date, end_date, increment, period):
result = []
nxt = start_date
delta = relativedelta(**{period:increment})
while nxt <= end_date:
result.append(nxt)
nxt += delta
return result
问题中的示例“从现在到明天 19:00 之间每 8 小时”将这样写:
start_date = datetime.now()
end_date = start_date + relativedelta(days=1)
end_date = end_date.replace(hour=19, minute=0, second=0, microsecond=0)
date_range(start_date, end_date, 8, 'hours')
注意period 的有效值是为relativedelta 相关信息定义的值,即:'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'microseconds'。
我的解决方案根据问题的要求返回一个列表。如果您一次不需要所有元素,则可以使用生成器,如@MartijnPieters 的回答。