Python没有检测到两个值相等,并且始终返回false

2024-10-03 19:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

对不起,我真的不知道该怎么解释。我正在尝试创建一个小程序来检测员工是否按时上班。 首先,我将一个浮点数(表示一小时)转换为datetime值:

 estabHourF=(float(estabHour)+0.18)
 minutes = estabHourF*60
 hours, minutes = divmod(minutes, 60)
 print("%02d:%02d"%(hours,minutes))
 todaysYear = datetime.date.today().year
 todaysMonth = datetime.date.today().month
 todaysDay =datetime.date.today().day
 todaysSeconds = datetime.datetime.now().second

然后,我将所有这些都插入到一个列表中:

nowH = datetime.datetime(todaysYear, todaysMonth, todaysDay, int("%02d"%(hours)), int("%02d"%(minutes)), todaysSeconds)

然后,我创建了另一个列表,该列表创建了类似的分钟周期,以便我可以将现在的时间与以后输入的既定时间进行比较:

numMinutes = 15
date_list = [nowH - datetime.timedelta(minutes=x) for x in range(numMinutes)]

如果我打印这个,它是这样的:

datetime.datetime(2021, 7, 27, 9, 14, 33)

这是它在控制台上的外观

最后,我试着通过模仿它的样子来比较过去和现在的时间列表:

for x in range(len(date_list)):
                if (date_list[checkList])=="datetime.datetime({0}, {1}, {2}, {3}, {4}, {5})".format(todaysYear, todaysMonth, todaysDay, int(datetime.datetime.now().strftime("%I")), datetime.datetime.now().minute, todaysSeconds):
                    punctual = True
                    print("Puntual: ", punctual)
                    print(datetime.datetime.now())
                else:
                    print("datetime.datetime({0}, {1}, {2}, {3}, {4}, {5})".format(todaysYear, todaysMonth, todaysDay, int(datetime.datetime.now().strftime("%I")), datetime.datetime.now().minute, todaysSeconds))
                checkList+=1

是的,如果错了,我想让它显示我正在比较的相同值,并且,不要告诉我这两者不一样

from my list: datetime.datetime(2021, 7, 27, 9, 25, 49)
from the print inside "else": datetime.datetime(2021, 7, 27, 9, 25, 49)

它们完全相同,但由于我的一些错误,python似乎无法识别它:')

如果你能帮助我,我会非常感激的


Tags: 列表todaydatetimedate时间nowlistint
2条回答

打印时得到的"datetime.datetime(2021, 7, 27, 9, 14, 33)"只是datetime对象的字符串表示形式。datetime对象本身永远不等于该字符串。 可以使用比较运算符直接比较两个日期时间

我也不是100%确定checklist变量的用途,但在我看来,您正在使用它来迭代date_list(不过,我没有在代码段中看到它被初始化)。如果是这种情况,为什么不直接使用x或者更好,您可以直接这样做:

for date in date_list:
    if date == nowH:
        #[...]

日期变量将直接从列表中获取所有值

您可以定义“可接受的最新日期时间”

lateAfter = nowH + datetime.timedelta(minutes=numMinutes)

然后简单地使用日期比较运算符,将for替换为:

if datetime.datetime.now() <= lateAfter:
    punctual = True
    print("Puntual: ", punctual)
    print(datetime.datetime.now())
else: # Not punctual
    print(datetime.datetime.now())

我是否正确地理解了不给你真实的比较是这样的

if (date_list[checkList])=="datetime.datetime({0}, {1}, {2}, {3}, {4}, {5})".format(todaysYear, todaysMonth, todaysDay, int(datetime.datetime.now().strftime("%I")), datetime.datetime.now().minute, todaysSeconds):

对不起,如果我没有道理(新手),但是你不是在比较str和datetime吗

相关问题 更多 >