Explores how to increment by a month. datetime is necessary but insufficient. dateutil is handy.


In [1]:
import datetime

In [2]:
date = datetime.date(2009, 9, 28)

In [3]:
date.month


Out[3]:
9

In [4]:
date.month += 1


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-af084a0694b5> in <module>()
----> 1 date.month += 1

AttributeError: attribute 'month' of 'datetime.date' objects is not writable

In [5]:
!pip install python-dateutil


Downloading/unpacking python-dateutil
  Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB): 201kB downloaded
Downloading/unpacking six>=1.5 (from python-dateutil)
  Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: python-dateutil, six
Successfully installed python-dateutil six
Cleaning up...

In [6]:
from dateutil.relativedelta import relativedelta

In [7]:
date + relativedelta(months=1)


Out[7]:
datetime.date(2009, 10, 28)

In [8]:
def iter_month(date, increment=relativedelta(months=1)):
    while True:
        yield date
        date += increment

In [9]:
from itertools import islice

In [10]:
tuple(islice(iter_month(date), 5))


Out[10]:
(datetime.date(2009, 9, 28),
 datetime.date(2009, 10, 28),
 datetime.date(2009, 11, 28),
 datetime.date(2009, 12, 28),
 datetime.date(2010, 1, 28))