需要帮助比较从条件语句中的日期框派生的日期时间对象



我有一个csv文件,其中包含人员的姓名以及他们在工作中刷徽章的时间。我正在尝试编写一个程序,评估日期框,并提取他们第一次刷徽章的时间,看看那时间是否在1个多小时前。csv文件如下所示。

,EmpName,PIN,swiped_in,datetime_in
1,Bob,1234,True,2020-03-03 07:20:02.909810

然后我用这个代码读取文件并进行操作:

def check_logins(employee_name):
swiped_in = False
try:
with open('analytics.csv', 'r+') as analytics:
analyticsdf = pd.read_csv(analytics)
analyticsdf['datetime_in'] = pd.to_datetime(analyticsdf['datetime_in'])
check_time = (datetime.today() - timedelta(hours=1))
in_time= (datetime.today() - analyticsdf.loc[analyticsdf['UserName'] == employee_name, 'datetime_in'].iloc[0])
if username in reg_usersdf.values:
if analyticsdf.loc[analyticsdf['EmpName'] == employee_name, 'swiped_in'].iloc[0]:
print("Condition is True")
if in_time > check_time:
print("Time is 1 hour old")
swiped_in = False
analyticsdf.loc[analyticsdf['EmpName'] == employee_name, 'swiped_in'].iloc[0] = swiped_in
analyticsdf.to_csv('analytics.csv')
return swiped_in
else:
swiped_in = True
return swiped_in
except FileNotFoundError:
print('File not found.')  
return swiped_in

我的问题在第二个和第三个条件语句之间。我首先检查csv文件中是否存在该员工,然后检查他/她是否刷过他们的徽章。最后,我检查最后一次刷徽章是否是在1个多小时前。然而,我从未输入"时间为1小时"复选框。相反,我得到一个TypeError,上面写着"TypeError:无法将类型Timedelta与类型datetime进行比较。">

如何正确转换时间,以检查第一次时间是否与当前时间相距超过1小时?

根据您的代码,check_timedatetime:当前时间前1小时

check_time = (datetime.today() - timedelta(hours=1))

另一方面,in_timetimedelta:当前时间和最后一次滑动之间的持续时间

in_time= (datetime.today() - analyticsdf.loc[analyticsdf['UserName'] == employee_name, 'datetime_in'].iloc[0])

这就是为什么你会得到TypeError,因为你试图比较实际时间和持续时间

if in_time > check_time:

所以你想要的是看看持续时间是否大于1小时,如下所示:

if in_time > timedelta(hours=1):

最新更新