I have been looking around, and I am sure the answer is right in front of me, but I am using the datetime for the first time and had a question. So short version is I have a script that reads a csv and looks for start and stop times for yard moves. I need to take those times and subtract them to see how long it took. I am not sure if using strptime is the right way to go about it or not. I am also confused as to why I can not subtract the stop_time and start_time from each other even though they are datetime.datetime types.
import csv
from datetime import datetime, date
start_time = '0'
stop_time ='0'
trailer = '0'
t_time = open('move_times.csv')
t_time_reader = csv.reader(t_time, delimiter=',')
for i in t_time_reader:
if i[2] == 'HOSTLER_COMPLETE':
stop_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
trailer = i[11]
elif i[2] == 'HOSTLER_START' and i[11] == trailer:
start_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
print(stop_time - start_time)
CodePudding user response:
The problem is that on the first iteration at least one of start_time and stop_time will necessarily be the string '0'.
Consider the first iteration of the loop. start_time == stop_time == '0', because you set them to this string before the loop.
Then, this if statement is executed:
if i[2] == 'HOSTLER_COMPLETE':
stop_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
trailer = i[11]
elif i[2] == 'HOSTLER_START' and i[11] == trailer:
start_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
Here are the possible scenarios:
(i[2] == 'HOSTLER_COMPLETE') is True, so the first branch is taken. Then:stop_timebecomes a valid datestart_timeremains equal to the string'0'
- OR
(i[2] == 'HOSTLER_START' and i[11] == trailer) is True, so the second branch is taken. Then:start_timebecomes a valid datestop_timeremains equal to the string'0'
- OR neither branch is taken, since there's no explicit
elsebranch. Then:start_timeremains equal to the string'0'stop_timeremains equal to the string'0'
Thus, after the if statement, at least one of start_time and stop_time will necessarily equal '0'.
Subtracting anything from a string is an error (as is subtracting a string from anything), so print(stop_time - start_time) fails. Thus, the first iteration of the loop fails, dragging along the entire program.
