比较python中的日期(3.3.3)

时间:2014-02-19 20:10:41

标签: python date time

我必须要求用户输入开始日期和结束日期。日期必须在 YYYY-MM-DD格式。我已经编写了一些if语句来处理用户可能会犯的一些格式错误,例如不输入中间的破折号,以及 在彼此的位置输入月份和日期。

我现在需要的是确保结束日期始终晚于开始的方法 日期。从逻辑上讲,结束日期不能在开始日期之前发生。

我不知道如何做到这一点。任何帮助将不胜感激,谢谢。

def get_start_date() -> str:
    START_DATE = input('Enter start date (in YYYY-MM-DD format): ').strip()

    if len(START_DATE) != 10:
        print('Date entry not correct, please try again')
        get_start_date()

    elif eval(START_DATE[5]) > 1:
        print('Date entry not correct, please try again')
        get_start_date()

    elif eval(START_DATE[8]) > 3:
        print('Date entry not correct, please try again')
        get_start_date()

    elif START_DATE[4] and START_DATE[7] != '-':
        print('Date entry not correct, please try again')
        get_start_date()



def get_end_date() -> str:
    END_DATE = input('Enter end date (in YYYY-MM-DD format): ').strip()

    if len(END_DATE) != 10:
        print('Date entry not correct, please try again')
        get_end_date()

    elif END_DATE[4] and END_DATE[7] != '-':
        print('Date entry not correct, please try again')
        get_end_date()

    elif eval(END_DATE[5]) > 1:
        print('Date entry not correct, please try again')
        get_end_date()



get_start_date()
get_end_date()

1 个答案:

答案 0 :(得分:6)

您可以简化此代码;获取开始日期与获取结束日期非常相似,datetime模块将为您完成大量工作:

from datetime import datetime

def get_date(prompt, f="%Y-%m-%d"):
    while True:
        try:
            return datetime.strptime(input(prompt), f)
        except ValueError:
            print("Not a valid date.")

现在您要返回一个实际的datetime对象,而不仅仅是一个字符串,并且可以轻松地进行比较:

start = get_date("Enter start date (YYYY-MM-DD): ")
while True:
    end = get_date("Enter end date (YYYY-MM-DD): ")
    if end > start:
        break
    print("End must be later than start.")