Is there a cleaner way of building a list of the previous, next months than this? At first I tried using a timedelta but it doesn't accept months as an argument, so my next working example is this:

from datetime import datetime
current_date = datetime.now()

months = []
for month_adjust in range(2, -3, -1): # Order by new to old.
    # If our months are out of bounds we need to change year.
    if current_date.month + month_adjust &lt;= 0:
        year = current_date.year - 1
    elif current_date.month + month_adjust &gt; 12:
        year = current_date.year + 1
    else:
        year = current_date.year
    # Keep the months in bounds.
    month = (current_date.month + month_adjust) % 12
    if month == 0: month = 12
    months.append(current_date.replace(year, month=month, day=1))


Is there a cleaner way?
Based on this answer, I would do something like :

from datetime import date
from dateutil.relativedelta import relativedelta
today = date.today()
months = [today + relativedelta(months = +i) for i in range(2,-3,-1)]


It's always better not to have to play with the dates manually as so many things can go wrong.

(I don't have access to a machine with relativedelta here so it's not tested but I'm pretty confident it should work)