数据读取时一直都会报错,下面第一张图是最新修改之后的报错,然后是源码
【相关推荐】
查看表格发现:进场时间和出场时间分别在第8列和第9列。
def calculate_data(sheet, row):
enter_time = sheet.cell_value(row,8) #得到进场时间
exit_time = sheet.cell_value(row,9) #得到出场时间
if enter_time == '' or exit_time == '': #某些行为空,为空直接跳过
return datetime.timedelta(hours=0)
#因为得到的都是string,需要转换为datetime便于统计时间差
#start_20为入场当前的20点的时间
start_20 = datetime.datetime.strptime(enter_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=20)
#start_10为入场当前的10点的时间
start_10 = datetime.datetime.strptime(enter_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=10)
#end_20为出场当前的20点的时间
end_20 = datetime.datetime.strptime(exit_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=20)
#end_10为出场当前的10点的时间
end_10 = datetime.datetime.strptime(exit_time[:10], "%Y-%m-%d") + datetime.timedelta(hours=10)
#enter_time 入场时间
enter_time = datetime.datetime.strptime(enter_time, "%Y-%m-%d %H:%M:%S")
#exit_time 出场时间
exit_time = datetime.datetime.strptime(exit_time, "%Y-%m-%d %H:%M:%S")
result = None
#delta 为入场时间和出场时间(不考虑时分秒)的时间差,单位天,便于后续的计算
a = exit_time - datetime.timedelta(hours=exit_time.hour, minutes=exit_time.minute, seconds=exit_time.second)
b = enter_time - datetime.timedelta(hours=enter_time.hour, minutes=enter_time.minute, seconds=enter_time.second)
delta = (a - b).total_seconds()/86400
#后续的条件判断就是计算特定时间内的停车时长,有兴趣可以看看,没兴趣可以直接略过,最后返回一个result计算每行的时间差
if enter_time < start_10:
if exit_time < end_10:
result = exit_time - enter_time - datetime.timedelta(hours=10*delta)
elif exit_time > end_20:
result = exit_time - enter_time - datetime.timedelta(hours=10*delta+10)
else:
result = start_10 - enter_time + datetime.timedelta(hours=14*delta)
elif enter_time > start_20:
if exit_time < end_10:
result = exit_time - enter_time - datetime.timedelta(hours=10*delta-10)
elif exit_time > end_20:
result = exit_time - enter_time - datetime.timedelta(hours=10*delta)
else:
result = end_10 - enter_time - datetime.timedelta(hours=10*delta-10)
else:
if exit_time < end_10:
result = exit_time - start_20 - datetime.timedelta(hours=10*delta-10)
elif exit_time > end_20:
result = exit_time - start_20 - datetime.timedelta(hours=10*delta)
else:
result = datetime.timedelta(hours=14*delta)
return result