在Python中解析人格式日期范围

时间:2012-04-26 19:25:46

标签: python parsing datetime date

我有一些人类日期范围,用字符串表示,如下所示:

22-24th April 2012
14-23 July
20th June - 5th July

我想在Python中解析这些,以便最终得到两个日期时间对象:一个用于开始,一个用于结束。

是否有任何模块可以让我这样做?我已经尝试了parsedatetime,看起来其中的evalRange函数可能会这样做(有关文档,请参阅http://code-bear.com/code/parsedatetime/docs/index.html),但它似乎根本不会解析任何内容,并且只返回当前日期/时间两次。

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

我最终编写了一个Python模块来实现这一点,我现在已经开源了。它可以在Github下载,有documentation,可以使用以下命令从PyPI安装:

pip install daterangeparser

对于那些感兴趣的人,该模块的工作原理是使用PyParsing创建一个完整的解析器,这是一个很棒的(非常易于使用的)工具。

答案 1 :(得分:1)

您可以使用dateutil.parser。但它不处理日期范围。您可能需要在之前应用正则表达式。

import dateutil.parser
dateutil.parser.parse("20th June")

返回datetime.datetime(2012, 6, 20, 0, 0)

此致

答案 2 :(得分:1)

根据以前的答案,您可以做的是:

  1. 预处理输入,以便获得开始和结束日期(例如:20th June5th July)。在您的第一个示例(date_range == 22-24th July 2012)中,您可以使用date_range.split(' ')[0].split('-')执行此操作:这将返回['22', '24th'](只需删除th和类似内容)
  2. 使用datetime dateutil.parser
  3. 从这些日期获取dateutil.parser.parse('22 July 2012')个对象

    这是以前所说的实现:

    import dateutil.parser
    date_range = '20-22th July 2013'
    date_range = date_range.lower()
    for suffix in {'th', 'rd', 'st'}:
        date_range.replace(suffix, '')
    days = date_range.split(' ')[0].split('-')
    month_year = date_range.split(' ')[1]
    begin, end = days[0] + ' ' + month_year, days[1] + ' ' + month_year
    begin_date = dateutil.parser.parse(begin)
    end_date = dateutil.parser.parse(end)