问题。在我的Django应用程序中,用户为计划执行创建任务。用户是非技术性的,如果他们可以编写传统的人类可读表达式来定义何时执行某些任务,那将是很好的,例如:
这受到Todoist的启发。目前,只需要日期;没有时间。我花了几个小时用谷歌搜索图书馆来做这件事,但没有运气。我期待一个函数,比如in_range(expression, date)
,这样:
>>> in_range('every monday, wednesday', date(2014, 4, 28))
True
>>> in_range('every end of month', date(2014, 5, 12))
False
>>> in_range('every millenium', date(2014, 5, 8))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown token "millenium".
变种。这就是我所看到的。
datetime
库执行日期解析,但不按照上述解析日期范围。rrule
支持定期日期,非常实用,但仍不支持解析。那么,是否有Python代码片段或我错过的库来做这件事?如果没有,我将自己编写解析器。如果看起来不是太糟糕的话,想在开源版本中发布它。
答案 0 :(得分:4)
Recurrent是一个库,它将进行自然语言日期解析,并支持重复日期。它与您提供的API不匹配,但允许您创建可与Python datetime
库一起使用的规则。
从他们的Github页面
自然语言解析日期和重复发生的事件
实施例
日期时间
- 下周二
- 明天
- 一小时
重复发生的事件
- 在工作日
- 从2010年1月1日到2020年12月25日的每月四分之一
- 每个月到下个月
- 每年11月的第四个星期四。
- 星期二和星期四3点15分
凌乱的字符串
- 请在周二中午每隔一天安排一次会议
- 下周二晚上11点设置闹钟