我想创建一个日期列表,从今天开始,追溯到任意天数,例如,在我的示例中是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
我想创建一个日期列表,从今天开始,追溯到任意天数,例如,在我的示例中是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
当前回答
根据我自己的回答:
import datetime;
print [(datetime.date.today() - datetime.timedelta(days=x)).strftime('%Y-%m-%d') for x in range(-5, 0)]
输出:
['2017-12-11', '2017-12-10', '2017-12-09', '2017-12-08', '2017-12-07']
区别在于我得到的是'date'对象,而不是'datetime '对象。datetime”。
其他回答
Matplotlib相关
from matplotlib.dates import drange
import datetime
base = datetime.date.today()
end = base + datetime.timedelta(days=100)
delta = datetime.timedelta(days=1)
l = drange(base, end, delta)
根据我自己的回答:
import datetime;
print [(datetime.date.today() - datetime.timedelta(days=x)).strftime('%Y-%m-%d') for x in range(-5, 0)]
输出:
['2017-12-11', '2017-12-10', '2017-12-09', '2017-12-08', '2017-12-07']
区别在于我得到的是'date'对象,而不是'datetime '对象。datetime”。
import datetime
def date_generator():
cur = base = datetime.date.today()
end = base + datetime.timedelta(days=100)
delta = datetime.timedelta(days=1)
while(end>base):
base = base+delta
print base
date_generator()
我知道这个问题已经有人回答了,但为了历史的目的,我还是把我的答案写下来,因为我认为这是直截了当的。
import numpy as np
import datetime as dt
listOfDates=[date for date in np.arange(firstDate,lastDate,dt.timedelta(days=x))]
当然,它不会像代码高尔夫那样赢得任何东西,但我认为它很优雅。
一般来说,Pandas非常适合时间序列,并直接支持日期范围。
例如pd.date_range():
import pandas as pd
from datetime import datetime
datelist = pd.date_range(datetime.today(), periods=100).tolist()
它也有很多选择,让生活更轻松。例如,如果您只想要工作日,您只需交换bdate_range。
参见日期范围文档
此外,它完全支持pytz时区,可以平滑地跨越春季/秋季夏令时转换。
编辑由OP:
如果你需要实际的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()