如何在Python中设置最小和最大日期以验证输入?

时间:2015-04-19 22:35:43

标签: python date datetime range

标题中的问题。我正在编写一个程序,要求用户输入mm / dd / yy格式的日期,如果仅在2013年验证该日期,然后以此格式打印日期:2013年7月1日。我我只是得到一个逻辑错误,因为即使年份不是2013年,该程序仍会打印日期。这是我的代码:

import datetime


def main():
    def date_method(user_date):
        date_list = user_date.split('/')
        month = int(date_list[0])
        day = int(date_list[1])
        year = 2000 + int(date_list[2])
        try:
            datetime.datetime.min = 1/1/2013
            datetime.datetime.max = 12/31/2013
            the_date = datetime.date(month, day, year)
            correct_date = "True"
            return the_date, correct_date
        except ValueError as err:
            print(err)
            the_date = 1/1/1
            correct_date = "False"
            return the_date, correct_date

    correct_date = "False"
    while correct_date == "False":
        user_date = str(input("Please enter a date in the month/day/year format: mm/dd/yy. "))
        the_date, correct_date = date_method(user_date)
        if correct_date == "True":
            print("Date: ", datetime.date.strftime(the_date, "%B %d, %y"))

main()

我认为我关闭的是我的datetime.datetime.min和datetime.datetime.max变量。

2 个答案:

答案 0 :(得分:0)

设置datetime.datetime.mindatetime.datetime.max对我来说就像全局变量一样。更好的解决方案是简单地检查它是否在一个范围内。

import datetime

def date_method(user_date):
    date_list = user_date.split('/')
    month = int(date_list[0])
    day = int(date_list[1])
    year = 2000 + int(date_list[2])
    the_date = datetime.date(year, month, day)
    if datetime.date(2013, 1, 1) <= the_date <= datetime.date(2013, 12, 31):
        return the_date, True
    else:
        print("Date entered is not in the year 2013.")
        return datetime.date(1, 1, 1), False

def main():
    correct_date = False
    while correct_date == False:
        user_date = input("Please enter a date in the month/day/year format: mm/dd/yy. ")
        the_date, correct_date = date_method(user_date)
        if correct_date:
            print("Date: ", datetime.date.strftime(the_date, "%B %d, %y"))

main()

代码中还有一些错误:

  • 您使用字符串"True""False"而不只是TrueFalse
  • 它是datetime.date(year, month, day)而不是datetime.date(month, day, year)
  • 为什么要在date_method内定义main()
  • 操作员/无法用于示例中的日期。你真正在做的只是划分一个数字,Python将该数字解析为日期。 (这与你的日期完全不同)

答案 1 :(得分:0)

Python 内置类型不可变,因此如果要验证年份只是转换为datetime对象并检查{{1},则无法设置任何属性}}属性为.year

>= 13

即使你if mn_year <= dt.year <= mx_year 可以是一个方程而不是约会。

如下所示:

1/1/2013

如果您想要min和max,请使用上面的mn_year和mx_year。您不需要转换为整数,您可以使用字符串使用datetime.strptime。您也不需要将输入转换为str,这正是它的本质。当用户输入不正确的数据时,也会在try中拆分和解包user_date = input("Please enter a date in the month/day/year format: mm/dd/yy. ") def date_method(user_date): try: mn, dy, year = user_date.split('/') the_date = datetime.datetime.strptime("{} {} {}".format(mn, dy, year), "%d %m %y") if the_date.year >= 2013: correct_date = "True" return the_date.year, correct_date except ValueError as err: print(err) .... 字符串。