Reputation: 197
I just start learning python for few weeks and now have a problem with datetimes
I generate a list like this
datetime.date(1991, 11, 1),
datetime.date(1991, 12, 1),
datetime.date(1992, 1, 1),
...
datetime.date(2017, 10, 1),
datetime.date(2017, 11, 1),
datetime.date(2017, 12, 1)]
which the time step is month and I would like to use it to create a list like this
datetime.date(1991, 11, 1),
datetime.date(1991, 11, 2),
datetime.date(1991, 11, 3),
...
datetime.date(2017, 12, 29),
datetime.date(2017, 12, 30),
datetime.date(2017, 12, 31)]
which the time step become days and the last day is the end of the month.
I use some way such as calculate monthrange and then generate a new list from the starting day, but the code seems lengthy and not so good.
Do anyone have a better way to solve this? thanks for advance!
Upvotes: 1
Views: 1545
Reputation: 61063
The easiest way would probably be to have a generator with a configurable step.
from datetime import date, timedelta
def days(start, end, step=timedelta(days=1)):
curr = start
while curr <= end:
yield curr
curr += step
print(list(days(date(2017, 1, 1), date(2017, 1, 3))))
# [datetime.date(2017, 1, 1), datetime.date(2017, 1, 2), datetime.date(2017, 1, 3)]
Upvotes: 1
Reputation: 3800
You can use the "timedelta" module from a starting date as follows:
from datetime import datetime,timedelta
startDate = datetime(1991,1,1)
endDate = datetime(2017,12,31)
oneDayDelta = timedelta(days=1)
totalDaysOfInterest = (endDate - startDate).days
myDatesList = [startDate + k*oneDayDelta for k in range(totalDaysOfInterest)]
Upvotes: 0