在Python中创建日期范围

601 投票
23 回答
932287 浏览
提问于 2025-04-15 12:14

我想创建一个日期列表,从今天开始,往回推任意天数,比如在我的例子中是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)]

撰写回答