需要在Python中转换有效的日期值并错误输出无效值

需要在Python中转换有效的日期值并错误输出无效值,python,strptime,Python,Strptime,我正在使用Python3.6datetime.datetime.strtime根据提供的格式解析不同的输入日期值 下面是我正在使用的代码 def date_convert(dt, fmt): outdict = {'result': '', 'error': ''} try: outdict['result'] = datetime.strptime(dt, fmt) except Exception: outdict['error'] =


我正在使用Python3.6
datetime.datetime.strtime
根据提供的格式解析不同的输入日期值
下面是我正在使用的代码

def date_convert(dt, fmt):
    outdict = {'result': '', 'error': ''}
    try:
        outdict['result'] = datetime.strptime(dt, fmt)
    except Exception:
        outdict['error'] = 'Invalid input date value, expected format is ' + fmt
我面临上述代码的两个问题

  • 无法识别%Y%m%d、%Y%m%d、%Y%m%d%H:%m和其他几种格式的无效日期值。在Java中,我们有setLenient选项,它将帮助我们匹配到exact并进行转换
    例如:
    date\u转换('181223','%Y%m%d')

    对于上述输入,我得到的输出为1812-02-03 00:00:00,但我需要得到的输出为无效格式。如何实现这一点
  • 有几次,我会得到两个或三个日期格式,在一个特定的列中为数不多的数据文件。为此,我希望传递格式列表,以便哪种格式与应该使用和转换的格式匹配
    下面是文件中单个字段的值。我想传递类似['%Y%m%d'、'%m-%d-%Y'、'%d-%b-%Y']的内容,并转换所有输入值
    日期字段
    2018-23-04
    2018-14-04
    03-17-18
    12-29-17
    2018年3月25日
    2018年1月29日

  • 谢谢,
    Raghunath.

    尝试使用模块

    演示:

    from dateutil import parser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( parser.parse(i, dayfirst=True))
    
    import dateparser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( dateparser.parse(i))
    
    2018-04-23 00:00:00
    2018-04-14 00:00:00
    2018-03-17 00:00:00
    2017-12-29 00:00:00
    2018-03-25 00:00:00
    2018-01-29 00:00:00
    

    演示:

    from dateutil import parser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( parser.parse(i, dayfirst=True))
    
    import dateparser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( dateparser.parse(i))
    
    2018-04-23 00:00:00
    2018-04-14 00:00:00
    2018-03-17 00:00:00
    2017-12-29 00:00:00
    2018-03-25 00:00:00
    2018-01-29 00:00:00
    
    输出:

    from dateutil import parser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( parser.parse(i, dayfirst=True))
    
    import dateparser
    d = ['2018-23-04', '2018-14-04', '03-17-18', '12-29-17', '25-Mar-2018', '29-Jan-2018']
    for i in d:
        print( dateparser.parse(i))
    
    2018-04-23 00:00:00
    2018-04-14 00:00:00
    2018-03-17 00:00:00
    2017-12-29 00:00:00
    2018-03-25 00:00:00
    2018-01-29 00:00:00
    

    嗨,Rakesh,我已经用过这个模块了。此函数无法处理%m%d%Y Ex:parser.parse('03232018')之类的格式,并且与datetime.strptimeRakesh相比速度非常慢。我得到的值错误:parser.parse('03232018')的月份必须在1..12之内。如何给出此模块的格式是指第二个选项
    import dateparser
    -->
    dateparser.parse('03232018')
    print(dateparser.parse('181223',['%Y%m%d'))--输出:1812-02-03 00:00:00。打印(dateparser.parse('181223',['%y%m%d'])预计会失败