# Python – the standard way to add N seconds to datetime.time in Python

datetimemathpythontime

Given a `datetime.time` value in Python, is there a standard way to add an integer number of seconds to it, so that `11:34:59` + 3 = `11:35:02`, for example?

These obvious ideas don't work:

``````>>> datetime.time(11, 34, 59) + 3
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'
>>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
>>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'
``````

In the end I have written functions like this:

``````def add_secs_to_time(timeval, secs_to_add):
secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
``````

I can't help thinking that I'm missing an easier way to do this though.

### Related

#### Best Solution

You can use full `datetime` variables with `timedelta`, and by providing a dummy date then using `time` to just get the time value.

For example:

``````import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
``````

results in the two values, three seconds apart:

``````11:34:59
11:35:02
``````

You could also opt for the more readable

``````b = a + datetime.timedelta(seconds=3)
``````

if you're so inclined.

If you're after a function that can do this, you can look into using `addSecs` below:

``````import datetime

fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
fulldate = fulldate + datetime.timedelta(seconds=secs)
return fulldate.time()

a = datetime.datetime.now().time()
`````` 09:11:55.775695