在 Python 中解析人类可读的日期时间持续时间

Parsing human-readable datetime durations in Python

提问人:birophilo 提问时间:3/3/2019 更新时间:3/3/2019 访问量:2149

问:

许多常见的人类可读日期时间可以使用 来解析,例如:datetime.strptime()

'15 March 2019 13:00'

我知道有几个 Python 包将“模糊”人类可读的日期时间解析为 Python 日期时间对象,例如 dateparserparsedatetime,它们可以解析以下字符串:

'yesterday'
'next week'

但是,有没有一个 Python 库可以将常见的人类可读日期时间持续时间解析为开始和结束日期时间对象。例如:

'5 March 2019 13:00-18:30'
'5 March 2019 1:00-5:30pm'
'15-18 March 2019'
'2nd to 22nd March 2019'

到:

[datetime.datetime(2019, 3, 5, 13, 0), datetime.datetime(2019, 3, 5, 18, 30)]
[datetime.datetime(2019, 3, 5, 13, 0), datetime.datetime(2019, 3, 5, 18, 30)]
[datetime.datetime(2019, 3, 15, 0, 0), datetime.datetime(2019, 3, 18, 0, 0)]
[datetime.datetime(2019, 3, 2, 0, 0), datetime.datetime(2019, 3, 22, 0, 0)]

或者采用如下字符串:

'15-17 March 2019'

并返回包含日期的列表

[datetime.datetime(2019, 3, 15, 0, 0), datetime.datetime(2019, 3, 16, 0, 0), datetime.datetime(2019, 3, 17, 0, 0)]

请注意,我感兴趣的是解析特定的日期和时间,而不是非基于日历的持续时间,例如 or .'2 days''three weeks'

python 日期时间

评论

1赞 Gusi Gao 3/3/2019
在这篇文章中,已经有丰富的此类库集合。
3赞 birophilo 3/3/2019
据我所知,其中只有一个 - 时间字符串 - 解析日历持续时间。这是一个范围解析能力非常有限的存档项目 - 例如,“2019 年 3 月 15 日至 18 日”返回整个月,与“2019 年 3 月”相同。这些库和标准库都没有解决上述用例 - 尽管我很高兴被证明是错误的。
1赞 birophilo 3/3/2019
其他人建议使用datefinder。感谢您的建议 - 我尝试了上述字符串,它可以处理“2019 年 3 月 2 日至 22 日”,但不能处理其他字符串。
1赞 Life is complex 3/3/2019
你看过这个吗:dateutil.readthedocs.io/en/stable
1赞 Life is complex 3/10/2019
我对这个问题很感兴趣,因为我认为这个能力在未来很有用,所以我想知道你是否取得了任何进展?

答: 暂无答案