Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个日期格式解析为特定格式_Python_Date_Date Formatting_Date Parsing - Fatal编程技术网

Python 将多个日期格式解析为特定格式

Python 将多个日期格式解析为特定格式,python,date,date-formatting,date-parsing,Python,Date,Date Formatting,Date Parsing,在我的应用程序中,用户可以输入日期,格式为dd/mm/yy,带有日期分隔符的变体(比如他们可以使用/、-或空格作为分隔符)。他们还可以输入4位数的年份或2位数的年份,还可以输入3个字母的月份代码或2位数的月份代码。从用户处获得日期后,我希望验证该格式是否为有效的日期格式,然后将其转换为“%d-%b-%Y”。在下面的函数中,我正在验证日期格式,但我不确定如何处理所有混合的日期分隔符格式,如2013年12月1日、2013年12月1日、2013年12月1日等。这些格式可能会加载 def validat

在我的应用程序中,用户可以输入日期,格式为dd/mm/yy,带有日期分隔符的变体(比如他们可以使用/、-或空格作为分隔符)。他们还可以输入4位数的年份或2位数的年份,还可以输入3个字母的月份代码或2位数的月份代码。从用户处获得日期后,我希望验证该格式是否为有效的日期格式,然后将其转换为“%d-%b-%Y”。在下面的函数中,我正在验证日期格式,但我不确定如何处理所有混合的日期分隔符格式,如2013年12月1日、2013年12月1日、2013年12月1日等。这些格式可能会加载

def validate_date(date_str):
    formats = ['%d-%b-%Y', '%d-%b-%y', '%d-%m-%Y', '%d-%m-%y',
               '%d/%m/%Y', '%d/%m/%y', '%d/%b/%Y', '%d/%b/%y',
               '%d %m %Y', '%d %m %y', '%d %b %Y', '%d %b %y',
                '%d%m%Y', '%d%b%y', '%d%b%Y', '%d %b/%Y'] 
    data = None

    for fmt in formats:
        try:
            dateValue = datetime.datetime.strptime(date_str, fmt).date()
            data = dateValue
            break
        except ValueError:
            pass

    if data is None:
    # invalid date format

您可以将所有不是数字的字符替换为空格,然后使用更少的格式对其进行解析。

与其重新发明轮子,不如看看;它的
parse()
函数已经处理了这些格式以及更多的格式。我认为您不应该允许它们,因为它们在任何语言环境中都不代表有效的文件格式。如果你看一下Martijn提出的lib,你会发现变量是按d/m/y的顺序旋转的,而不是在分隔符的混合中。您还可以通过强制分别输入天、月和年(不完美)来解决此问题,或者提供日历WidgetHanks以供您回复。我确实向客户(应用程序的所有者)提出了建议我们最好使用日历小部件,但他们仍然希望允许用户使用混合分隔符输入日期