I am doing some time calculations in Python.
Part of this is trying to :
Given a date, add time interval (X years, X months, X weeks), return date
ie
I looked at the datetime and datetime.timedelta docs
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)¶.
These seem to work well if I want to add a certain number of hours or weeks. However,
E.g.
start = datetime.datetime(2000, 1, 1)
# expected output: datetime.datetime(2001, 1, 1)
# with the weeks, etc arguments given in timedelta, this fails unsurprisingly e.g
start + datetime.timedelta(weeks = 52)
# returns datetime.datetime(2000, 12, 30, 0, 0)
Is this year-based operation possible with the basic tools of datetime - if so, how would I go about it?
I realize that for the year example, I could just do start.replace(year = 2001)
, but that approach will fail if I have months or weeks as input.
From my understanding, the dateutil library has more advanced features, but I was not clear how well it interacts with the in-built datetime objects.
I have reviewed this similar question but it did not help me with this.
Any help is much appreciated!
Running Python 3.6.5 on MacOs.
timedelta
does not support years, because the duration of a year depends on which year (for example, leap years have Feb 29).
You could use a relativedelta
instead (from PyPI package python-dateutil
) which does support years
and takes into account the baseline date for additions.
>>> from dateutil.relativedelta import relativedelta
>>> import datetime
>>> d = datetime.date(2020, 2, 29)
>>> d
datetime.date(2020, 2, 29)
>>> d + relativedelta(years=1)
datetime.date(2021, 2, 28)