简洁的日期范围功能,类似于内置范围功能

时间:2014-05-30 03:46:21

标签: python python-2.7 datetime

我试图找到一种更简洁的方法来生成两个值之间的日期范围。我希望这个函数类似于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']

对我而言,基本功能似乎有很多代码。如果你能帮助我找到/修改一些代码来执行这个动作,那将是很好的。

1 个答案:

答案 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__索引等