python - 使用日期时间验证日期

python - validating date with datetime

我正在尝试验证提示给用户的 string。这个string应该写成dd/mm/aaaa的格式并且是一个有效的日期。我认为创建很多 if 来检查是不是很优雅,所以我研究并选择了 datetime 方法。

import datetime

dataInput = input("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")

ehDataValida = False

def validaData(dataInput) :
    while True :
            try :
                if dataInput != datetime.datetime.strptime(dataInput, "%d/%m/%Y").strftime("%d/%m/%Y") :
                    raise ValueError
                return False
            except ValueError:
                print("erro!")
                dataInput = input("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")
                return dataInput

validaData(dataInput)
print(validaData(dataInput))

它不起作用,每次测试我都发现了一个新错误。我缺少什么?在此之后,我将 dataInput.split('/') 并在 listData=[dd, mm, yyyy]

中实现日期

您的输入被读取为整数,例如:如果您输入 12/2/1992,它执行的除法运算为 ((12 / 2) / 1992),结果为零。使用 raw_input 代替

import datetime

dataInput = raw_input("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")

ehDataValida = False

def validaData(dataInput) :
    try:
        datetime.datetime.strptime(dataInput, '%d/%m/%y')
    except ValueError:
        raise ValueError("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")

validaData(dataInput)

试试这个。它应该工作

while True:
    try:
        dataInput = raw_input("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")
        date_formatted = datetime.datetime.strptime(dataInput, '%d/%m/%y')
        break
    except ValueError:
        raise ValueError("Insira sua data de nascimento no formato 'dd/mm/aaaa': ")