我有两个字符串变量,其中包含yyyy-mm-dd格式的日期,如下所示:
date1 = '2011-05-03'
date2 = '2011-05-10'
Run Code Online (Sandbox Code Playgroud)
我想编写生成date1到date2范围内所有日期的代码.如何在Python中完成?
fan*_*ous 31
Pandas一般适用于时间序列,并且直接支持日期范围和日期解析(它是自动的).
import pandas as pd
date1 = '2011-05-03'
date2 = '2011-05-10'
mydates = pd.date_range(date1, date2).tolist()
Run Code Online (Sandbox Code Playgroud)
它还有很多选项可以让生活更轻松.例如,如果你只想要工作日,你只需要交换bdate_range.
见http://pandas.pydata.org/pandas-docs/stable/timeseries.html#generating-ranges-of-timestamps
jon*_*esy 30
日期可以像数字一样相互比较,您可以使用datetime.timedelta对象进行与日期相关的数学运算.这里没有理由使用dateutil,并且没有理由对a la'range(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
>>>
Run Code Online (Sandbox Code Playgroud)
eum*_*iro 17
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
Run Code Online (Sandbox Code Playgroud)
由于dateutil不是标准库,因此您必须将其作为单独的包安装.有关格式(特别是dayfirst和yearfirst开关)的更多详细信息,请参阅文档.
import datetime
real_date1 = datetime.date(*[int(x) for x in date1.split('-')])
real_date2 = datetime.date(*[int(x) for x in date2.split('-')])
date_range = real_date2 - real_date1
dates = list()
for days in xrange(date_range.days):
dates.append(real_date1 + datetime.timedelta(days))
print dates
Run Code Online (Sandbox Code Playgroud)
对于python 3使用range而不是xrange.
假设您的日期已经是一个datetime.date类,您可以使用.fromordinal并.toordinal创建此oneliner.
from datetime import date
start_date = date(2011, 5, 3)
end_date = date(2011, 5, 10)
[date.fromordinal(i) for i in range(start_date.toordinal(), end_date.toordinal())]
Run Code Online (Sandbox Code Playgroud)
结果是独家的 end_date.用end_date.toordinal() + 1包容的范围end_date.
| 归档时间: |
|
| 查看次数: |
39095 次 |
| 最近记录: |