Reputation: 10996
I am trying to compute differences in time as follows:
import datetime
time_1 = datetime.datetime.strptime('18:00',"%H:%M")
time_2 = datetime.datetime.strptime('05:00',"%H:%M")
time_interval = time_2 - time_1
This results in:
datetime.timedelta(days=-1, seconds=39600)
Now, when I add this to some date like:
low_date = datetime.datetime(2000, 1, 1, 18, 0)
low_date + time_interval
This results in:
datetime.datetime(2000, 1, 1, 4, 0)
So, it is representing going backwards in time but I always want the difference to go forward i.e. time_2
should be interpreted as being in the future of time_1
. In this case, time_2
is 5 AM
the next day.
If time_2
was something like:
time_2 = datetime.datetime.strptime('21:00',"%H:%M")
It should be interpreted as 9 PM
on the same day.
EDIT
Solved it by adding something like:
if time_interval.days < 0:
time_interval = datetime.timedelta(
days=0,
seconds=time_interval.seconds)
Upvotes: 1
Views: 189
Reputation: 15387
Both times you give are in the same day.
If you mean the second one to always be in the future (positive difference), you need to move it into the future, if it's not already. Check it for being "smaller", and if it's smaller, you have to add a day to it.
time_1 = datetime.datetime.strptime('18:00',"%H:%M")
time_2 = datetime.datetime.strptime('05:00',"%H:%M")
if time_2 < time_1:
time_2 += datetime.timedelta(days=1)
time_interval = time_2 - time_1
# datetime.timedelta(seconds=39600)
# that's 6+5 = 11 hours = 39600 seconds
Upvotes: 1
Reputation: 5223
You need to subtract time_2
from time_1
, otherwise you will end with negative and nonsense values:
import datetime
time_1 = datetime.datetime.strptime('18:00',"%H:%M")
time_2 = datetime.datetime.strptime('05:00',"%H:%M")
if time_1 <= time_2:
time_1, time_2 = time_2, time_1
time_interval = time_1 - time_2
print(time_interval)
Output:
13:00:00
Upvotes: 0