在 python 中减去日期时间类型的问题
issue with subtracting datetime types in python
我一直在四处寻找,我确信答案就在我的面前,但是我是第一次使用日期时间并且有一个问题。这么短的版本是我有一个脚本可以读取 csv 并查找院子移动的开始和停止时间。我需要把这些时间减去,看看花了多长时间。我不确定使用 strptime 是否是正确的方法。我也很困惑为什么我不能将 stop_time 和 start_time 从彼此中减去,即使它们是 datetime.datetime 类型。
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)
问题在于,在第一次迭代中,start_time
和 stop_time
中的至少一个必然是字符串 '0'
.
考虑循环的 第一次 迭代。 start_time == stop_time == '0'
,因为你在循环之前将它们设置为这个字符串。
然后,这个if
语句被执行:
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'))
以下是可能的情况:
(i[2] == 'HOSTLER_COMPLETE') is True
,所以走第一个分支。然后:
stop_time
成为有效日期
start_time
仍然等于字符串 '0'
- OR
(i[2] == 'HOSTLER_START' and i[11] == trailer) is True
,所以走第二个分支。然后:
start_time
成为有效日期
stop_time
仍然等于字符串 '0'
- OR 两个分支都不被采用,因为没有明确的
else
分支。然后:
start_time
仍然等于字符串 '0'
stop_time
仍然等于字符串 '0'
因此,在 if
语句之后,start_time
和 stop_time
中至少有一个必然等于 '0'
.
从字符串中减去任何内容都是错误的(从任何内容中减去字符串也是如此),因此 print(stop_time - start_time)
失败。因此,循环的第一次迭代失败,拖累了整个程序。
我一直在四处寻找,我确信答案就在我的面前,但是我是第一次使用日期时间并且有一个问题。这么短的版本是我有一个脚本可以读取 csv 并查找院子移动的开始和停止时间。我需要把这些时间减去,看看花了多长时间。我不确定使用 strptime 是否是正确的方法。我也很困惑为什么我不能将 stop_time 和 start_time 从彼此中减去,即使它们是 datetime.datetime 类型。
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)
问题在于,在第一次迭代中,start_time
和 stop_time
中的至少一个必然是字符串 '0'
.
考虑循环的 第一次 迭代。 start_time == stop_time == '0'
,因为你在循环之前将它们设置为这个字符串。
然后,这个if
语句被执行:
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'))
以下是可能的情况:
(i[2] == 'HOSTLER_COMPLETE') is True
,所以走第一个分支。然后:stop_time
成为有效日期start_time
仍然等于字符串'0'
- OR
(i[2] == 'HOSTLER_START' and i[11] == trailer) is True
,所以走第二个分支。然后:start_time
成为有效日期stop_time
仍然等于字符串'0'
- OR 两个分支都不被采用,因为没有明确的
else
分支。然后:start_time
仍然等于字符串'0'
stop_time
仍然等于字符串'0'
因此,在 if
语句之后,start_time
和 stop_time
中至少有一个必然等于 '0'
.
从字符串中减去任何内容都是错误的(从任何内容中减去字符串也是如此),因此 print(stop_time - start_time)
失败。因此,循环的第一次迭代失败,拖累了整个程序。