比较日期时间时出错,python



我写了这个代码

import time
import datetime
import os
import msvcrt as m
while True:
    try:
        os.system("cls")
        delivery = input("Insert delivery date (dd/mm/aaaa): ")
        dateDelivery = datetime.datetime.strptime(delivery,     "%d%m%Y").strftime("%d/%m/%Y")
        dateInput = time.strftime("%d/%m/%Y")
    except ValueError:
        print("nWrong formatnnTry again")
        m.getch()
        continue 
    if dateDelivery <= dateInput:
        print("nThe inserted date has already pastnn", dateDelivery, "nnla Actual date: ", dateInput)
        m.getch()
        continue 
    else:
        break               
print("Input date: ", dateInput, "nDelivery date: ", dateDelivery)

它需要比较两个日期:发送交货的日期和实际日期,所以如果发送交货的时间是过去的日期,程序会发送一条消息表明这一点。

程序运行良好,但如果我在将来插入一些日期,程序会将它们识别为过去的日期。试试12122016。

我是一个代码新手,所以我认为这是一个非常简单的错误。

对不起我的英语,我也在努力提高。

感谢所有

您正在比较转换为string类型的两个日期,因此比较是字典式的。您应该使用日期时间类型,如下所示:

    dateDelivery = datetime.datetime.strptime(delivery,"%d%m%Y")
    dateInput = datetime.datetime.now()

您可以通过打印变量的类型来看到差异:

    print(type(dateDelivery))
    print(type(dateInput))

更改前后。

每次获得日期时间值时,都会使用strftime("%d/%m/%Y")将其转换为字符串。因此,当您比较dateDeliverydateInput时,您比较的是两段文本,而不是日期时间值。

当使用dd-mm-yyyy格式时,文本的排序并不总是与日期时间排序相对应(如果您真的想,可以使用具有正确排序的yyyy-mm-dd格式)。

例如:

>>> "01/01/2015" <= "01/01/2016"
True
>>> "02/01/2015" <= "01/01/2016" # wrong?
False

因此,在比较日期之前进行询问时,不应将它们转换为字符串。

dateDelivery = datetime.datetime.strptime(delivery, "%d%m%Y")
dateInput = datetime.datetime.now()

然后,当向用户显示结果时,您可以将它们转换为字符串:

humanDateInput = dateInput.strftime("%d/%m/%Y")
humanDateDelivery = dateDelivery.strftime("%d/%m/%Y")
print("Input date:", humanDateInput)
print("Delivery date:", humanDateDelivery)

相关内容

  • 没有找到相关文章

最新更新