在 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_timestop_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'))

以下是可能的情况:

  1. (i[2] == 'HOSTLER_COMPLETE') is True,所以走第一个分支。然后:
    • stop_time成为有效日期
    • start_time 仍然等于字符串 '0'
  2. OR(i[2] == 'HOSTLER_START' and i[11] == trailer) is True,所以走第二个分支。然后:
    • start_time成为有效日期
    • stop_time 仍然等于字符串 '0'
  3. OR 两个分支都不被采用,因为没有明确的 else 分支。然后:
    • start_time 仍然等于字符串 '0'
    • stop_time 仍然等于字符串 '0'

因此,在 if 语句之后,start_timestop_time 中至少有一个必然等于 '0'.

从字符串中减去任何内容都是错误的(从任何内容中减去字符串也是如此),因此 print(stop_time - start_time) 失败。因此,循环的第一次迭代失败,拖累了整个程序。