How to add delta to python datetime.time?
How would this work? datetime.datetime.now().time()
returns only hours, minutes, seconds and so on, there is no date information what .time()
returns, only time.
Then, what should 18:00:00 + 8 hours
return?
There's not answer to that question, and that's why you can't add a time and a timedelta.
In other words:
18:28:44, Sep. 16, 2012 + 8 hours #makes sense: it's 2:28:44, Sep. 17, 2012
18:28:44 + 8 hours # Doesn't make sense.
datetime.time
objects do not support addition with datetime.timedelta
s.
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.
All the solutions above are too complicated, OP had already shown that we can do calculation between datetime.datetime
and datetime.timedelta
, so why not just do:
(datetime.now() + timedelta(hours=12)).time()
Here is a function that adds a timedelta
to a time
:
def time_plus(time, timedelta):
start = datetime.datetime(
2000, 1, 1,
hour=time.hour, minute=time.minute, second=time.second)
end = start + timedelta
return end.time()
This will provide the expected result so long as you don't add times in a way that crosses a midnight boundary.