python error: unsupported operand type(s) for -: 'str' and 'str'
Question:
I am trying to get the variable stop_date
to take away the value from the variable start_date
to get the return output as 30
.
When I try this:
start_date = '20151231171500'
stop_date = '20151231174500'
test = stop_date - start_date
print test
It give me an error: TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’
The error are jumping on this line:
test = stop_date - start_date
I am trying to convert from date format into the minutes for the remaining time.
Answers:
start_date
and stop_date
are strings, which don’t support the -
operator. If you want to compute their (numerical) difference, define them as integers, i.e.
start_date = 20151231171500
stop_date = 20151231174500
or cast them to int
:
test = int(stop_date) - int(start_date)
Caveat: the difference of these numbers would be 3000, not 30. Not sure why you expect 30.
edit: so much for why you cannot substract a string from a string. To compute the actual time difference between dates, please see Martijn’s answer.
You have strings, not datetime objects. If you want to treat the strings as datetime information, you’ll need to parse them into datetime
objects:
from datetime import datetime
start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')
difference = stop_date - start_date
The resulting objects is a datetime.timedelta()
instance, which models a time duration in terms of days and seconds:
>>> from datetime import datetime
>>> start_date = '20151231171500'
>>> stop_date = '20151231174500'
>>> start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
>>> stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')
>>> start_date, stop_date
(datetime.datetime(2015, 12, 31, 17, 15), datetime.datetime(2015, 12, 31, 17, 45))
>>> difference = stop_date - start_date
>>> difference
datetime.timedelta(0, 1800)
>>> difference.seconds
1800
Printing a timedelta
object formats it to show days (if there are any), hours, minutes and seconds:
>>> print difference
0:30:00
or you can calculate the number of minutes by dividing by 60. If you use the divmod()
function you get the remainder in seconds as well:
>>> minutes, seconds = divmod(difference.seconds, 60)
>>> minutes, seconds
(30, 0)
Do the same again with the minutes
you calculated like this to get hours:
>>> hours, minutes = divmod(minutes, 60)
>>> hours, minutes, seconds
(0, 30, 0)
Note that you would use the timedelta.total_seconds()
method to include the days as well, if you wanted to record the total number of hours over 24.
I am trying to get the variable stop_date
to take away the value from the variable start_date
to get the return output as 30
.
When I try this:
start_date = '20151231171500'
stop_date = '20151231174500'
test = stop_date - start_date
print test
It give me an error: TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’
The error are jumping on this line:
test = stop_date - start_date
I am trying to convert from date format into the minutes for the remaining time.
start_date
and stop_date
are strings, which don’t support the -
operator. If you want to compute their (numerical) difference, define them as integers, i.e.
start_date = 20151231171500
stop_date = 20151231174500
or cast them to int
:
test = int(stop_date) - int(start_date)
Caveat: the difference of these numbers would be 3000, not 30. Not sure why you expect 30.
edit: so much for why you cannot substract a string from a string. To compute the actual time difference between dates, please see Martijn’s answer.
You have strings, not datetime objects. If you want to treat the strings as datetime information, you’ll need to parse them into datetime
objects:
from datetime import datetime
start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')
difference = stop_date - start_date
The resulting objects is a datetime.timedelta()
instance, which models a time duration in terms of days and seconds:
>>> from datetime import datetime
>>> start_date = '20151231171500'
>>> stop_date = '20151231174500'
>>> start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
>>> stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')
>>> start_date, stop_date
(datetime.datetime(2015, 12, 31, 17, 15), datetime.datetime(2015, 12, 31, 17, 45))
>>> difference = stop_date - start_date
>>> difference
datetime.timedelta(0, 1800)
>>> difference.seconds
1800
Printing a timedelta
object formats it to show days (if there are any), hours, minutes and seconds:
>>> print difference
0:30:00
or you can calculate the number of minutes by dividing by 60. If you use the divmod()
function you get the remainder in seconds as well:
>>> minutes, seconds = divmod(difference.seconds, 60)
>>> minutes, seconds
(30, 0)
Do the same again with the minutes
you calculated like this to get hours:
>>> hours, minutes = divmod(minutes, 60)
>>> hours, minutes, seconds
(0, 30, 0)
Note that you would use the timedelta.total_seconds()
method to include the days as well, if you wanted to record the total number of hours over 24.