Search code examples
pythondatetimetimetimedelta

How to add delta to python datetime.time?


From:

http://docs.python.org/py3k/library/datetime.html#timedelta-objects

A timedelta object represents a duration, the difference between two dates or times.

So why i get error with this:

>>> from datetime import datetime, timedelta, time
>>> datetime.now() + timedelta(hours=12)
datetime.datetime(2012, 9, 17, 6, 24, 9, 635862)
>>> datetime.now().date() + timedelta(hours=12)
datetime.date(2012, 9, 16)

>>> datetime.now().time() + timedelta(hours=12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

Solution

  • datetime.time objects do not support addition with datetime.timedeltas.

    There is one natural definition though, clock arithmetic. You could compute it like this:

    import datetime as dt
    now = dt.datetime.now()
    delta = dt.timedelta(hours = 12)
    t = now.time()
    print(t)
    # 12:39:11.039864
    
    print((dt.datetime.combine(dt.date(1,1,1),t) + delta).time())
    # 00:39:11.039864
    

    dt.datetime.combine(...) lifts the datetime.time t to a datetime.datetime object, the delta is then added, and the result is dropped back down to a datetime.time object.