我有一些人类日期范围,用字符串表示,如下所示:
22-24th April 2012
14-23 July
20th June - 5th July
我想在Python中解析这些,以便最终得到两个日期时间对象:一个用于开始,一个用于结束。
是否有任何模块可以让我这样做?我已经尝试了parsedatetime
,看起来其中的evalRange
函数可能会这样做(有关文档,请参阅http://code-bear.com/code/parsedatetime/docs/index.html),但它似乎根本不会解析任何内容,并且只返回当前日期/时间两次。
有什么想法吗?
答案 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)
根据以前的答案,您可以做的是:
20th June
和5th July
)。在您的第一个示例(date_range == 22-24th July 2012
)中,您可以使用date_range.split(' ')[0].split('-')
执行此操作:这将返回['22', '24th']
(只需删除th
和类似内容)datetime
dateutil.parser
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)