我试图找到一种更简洁的方法来生成两个值之间的日期范围。我希望这个函数类似于python中的内置范围函数。
#Range Function
>>>range(1,5)
[1,2,3,4]
这是我目前所写的:
def as_datetime(date_string):
try:
return datetime.datetime.strptime(date_string, '%d/%m/%Y')
except ValueError:
# The date string was invalid
return None
x = []
start_date = as_datetime('12/07/2013')
end_date = as_datetime('16/07/2013')
total_days = (end_date - start_date).days + 1
for day_number in range(total_days):
cd = (start_date + dt.timedelta(days = day_number)).date()
x.append(cd.strftime('%d/%m/%Y'))
#Output
>>>Print x
['12/07/2013', '13/07/2013', '14/07/2013', '15/07/2013', '16/07/2013']
对我而言,基本功能似乎有很多代码。如果你能帮助我找到/修改一些代码来执行这个动作,那将是很好的。
答案 0 :(得分:2)
你可以用发电机写这个。
from datetime import datetime, timedelta
def daterange(start, end):
current = start
while current < end:
yield current
current += timedelta(days = 1)
要优化一点,您应该保存timedelta
对象以便重复使用。使用这样的生成器:
start = datetime(2014, 1, 1)
end = datetime(2014, 1, 4)
for d in daterange(start, end):
print d
您可以通过创建class
并提供__iter__
来改进此实施。这样,您还可以提供__len__
,__getitem__
索引等