在python中生成给定范围内的所有日期

我有两个字符串变量,其中包含yyyy-mm-dd格式的日期,如下所示:

date1 = '2011-05-03'
date2 = '2011-05-10'

我想编写生成范围为date1到date2的所有日期的代码。 这怎么可以在Python中完成?


日期可以像数字一样相互比较,并且可以使用datetime.timedelta对象进行与日期相关的数学运算。 没有理由在这里使用dateutil,并且没有必要硬编码'范围(9)'的迭代次数。 这与您处理普通旧数字的方式非常相似。

>>> import datetime
>>> date1 = '2011-05-03'
>>> date2 = '2011-05-10'
>>> start = datetime.datetime.strptime(date1, '%Y-%m-%d')
>>> end = datetime.datetime.strptime(date2, '%Y-%m-%d')
>>> step = datetime.timedelta(days=1)
>>> while start <= end:
...     print start.date()
...     start += step
... 
2011-05-03
2011-05-04
2011-05-05
2011-05-06
2011-05-07
2011-05-08
2011-05-09
2011-05-10
>>> 

from dateutil import rrule, parser

date1 = '2011-05-03'
date2 = '2011-05-10'

dates = list(rrule.rrule(rrule.DAILY,
                         dtstart=parser.parse(date1),
                         until=parser.parse(date2)))

print dates

由于dateutil不是标准库,因此您必须将其作为单独的软件包进行安装。 有关格式的更多详细信息,请参阅文档(特别是dayfirstyearfirst开关)。


大熊猫对于时间序列总的来说很棒,并且对日期范围和日期解析(它是自动的)都有直接的支持。

import pandas as pd
date1 = '2011-05-03'
date2 = '2011-05-10'
mydates = pd.date_range(date1, date2).tolist()

它也有很多选项让生活更轻松。 例如,如果您只需要工作日,则只需交换bdate_range

请参阅http://pandas.pydata.org/pandas-docs/stable/timeseries.html#generating-ranges-of-timestamps

链接地址: http://www.djcxy.com/p/18475.html

上一篇: Generating all dates within a given range in python

下一篇: Running GUI application in the Windows service mode