使用两种不同的格式检查日期是否有效

时间:2019-06-30 20:25:42

标签: python date datetime

因此,我创建了以下函数,其目的是检查数据是否为YYYY-MM-DD或MM / DD / YYYY格式,并返回相应的值。如果没有返回-1。

from datetime import datetime

def dateValidate(date):

    try:
        if date != datetime.strptime(date, "%Y-%m-%d").strftime("%Y-%m-%d"):
                raise ValueError
        return 1
        if date == datetime.strptime(date, "%m/%d/%Y").strftime("%m/%d/%Y"):
                raise ValueError
        return 2
    except ValueError:
        return -1

但是,它似乎不适用于MM / DD / YY格式。有什么问题的想法吗?

编辑:

import datetime

def validate(date):
    try:
        if date != datetime.datetime.strptime(date, "%Y-%m-%d").strftime("%Y-%m-%d"):
            raise ValueError
        return 1
    except ValueError:
        return -1
    try:
        if date == datetime.datetime.strptime(date, "%m/%d/%Y").strftime("%m/%d/%Y"):
            raise ValueError
        return 2
    except ValueError:
        return -1

这将返回-1的{​​{1}}。

2 个答案:

答案 0 :(得分:3)

只需尝试每个datetime.strptime并分别捕获每个错误。

def dateValidate(date):
    try:
        datetime.strptime(date, "%Y-%m-%d")
        return 1
    except ValueError:
        try:
            datetime.strptime(date, "%m/%d/%Y")
            return 2
        except ValueError:
            return -1

答案 1 :(得分:0)

试错并不是真正的坏方法,但是您应该在这里想知道实际发生什么。

datetime.strptime(string, format)返回一个datetime值,或者提高一个ValueError。因此,除非您打算测试标准库,否则用strftime转换回字符串是没有用的。

在返回之后(在if的同一分支中)添加代码是没有用的,因为在return之后,该函数只是返回到其调用者。

因此,您必须使用try: except来测试格式,然后在try块中返回(如果达到返回值,则表示格式正确),然后在第一个迭代中使用新的try: except:除了块:

def dateValidate(date):
    try:
        _ = datetime.strptime(date, "%Y-%m-%d")
        return 1
    except ValueError:
        try:
            _ = datetime.strptime(date, "%m/%d/%Y")
            return 2
        except ValueError:
            return -1