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'
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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.
Method 2
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()
Method 3
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.
Method 4
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.
Method 5
A datetime.time object can be split into separate integer components that you can add to.
No need for timedelta eg:
from datetime import datetime, time
time_now = datetime.now().time()
twelve_hours_time = time(time_now.hour + 12, time_now.minute)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0