在Python中创建日期范围
我想创建一个日期列表,从今天开始,往回推任意天数,比如在我的例子中是100天。有没有比这个更好的方法呢?
import datetime
a = datetime.datetime.today()
numdays = 100
dateList = []
for x in range (0, numdays):
dateList.append(a - datetime.timedelta(days = x))
print dateList
23 个回答
144
获取指定开始日期和结束日期之间的日期范围(优化了时间和空间的复杂度):
import datetime
start = datetime.datetime.strptime("21-06-2014", "%d-%m-%Y")
end = datetime.datetime.strptime("07-07-2014", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
for date in date_generated:
print date.strftime("%d-%m-%Y")
451
Pandas
是处理时间序列数据的好工具,它可以直接支持日期范围的操作。
比如说,你可以使用 pd.date_range()
来生成日期范围:
import pandas as pd
from datetime import datetime
datelist = pd.date_range(datetime.today(), periods=100).tolist()
它还有很多选项可以让你的工作更轻松。比如说,如果你只想要工作日的日期,你只需要换成 bdate_range
就可以了。
详细的日期范围使用说明可以查看 这里。
此外,它还完全支持 pytz 时区,并且可以顺利处理春秋季节的夏令时变化。
编辑:原作者补充:
如果你需要的是实际的 Python 日期时间,而不是 Pandas 的时间戳:
import pandas as pd
from datetime import datetime
pd.date_range(end = datetime.today(), periods = 100).to_pydatetime().tolist()
#OR
pd.date_range(start="2018-09-09",end="2020-02-02")
这个例子使用了“end”参数来匹配原来的问题,但如果你想要降序的日期:
pd.date_range(datetime.today(), periods=100).to_pydatetime().tolist()
716
稍微好一点...
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]