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

时间:2018-06-21 08:46:20

标签: python strptime


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

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

上述代码

我面临两个问题
  1. 无法识别%Y%m%d,%y%m%d,%Y%m%d%H:%M和其他几种格式的无效日期值。在Java中,我们有setLenient选项,它将帮助我们进行精确匹配和转换
    例如:date_convert('181223', '%Y%m%d')
    对于上述输入,我将输出为1812-02-03 00:00:00,但我需要以无效格式获取输出。如何实现
  2. 在少数列中,很少有几次我会得到两三个日期格式的数据文件。为此,我想传递格式列表,以便使用和转换的格式都匹配。
    例如:下面是文件中单个字段的值。我想传递['%Y%m%d','%m-%d-%y','%d-%b-%Y']之类的东西,然后转换所有输入值
      

    Date_Field
      2018-23-04
      2018-14-04
      03-17-18
      17-29-17
      2018年3月25日
      2018年1月29日

谢谢,
拉古纳斯。

1 个答案:

答案 0 :(得分:1)

尝试使用 dateutil 模块。

演示:

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))

dateparser

演示:

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