Chi
Chi

Reputation: 197

how can I generate a list of days by known months

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

Answers (2)

Patrick Haugh
Patrick Haugh

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

ma3oun
ma3oun

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

Related Questions