【发布时间】:2014-04-26 15:19:47
【问题描述】:
问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非技术性的,如果他们可以编写常规的人类可读表达式来定义何时执行某些任务,那就太好了,例如:
- 每周一
- 每周五、周三
- 每天
- 每月 1、14、20 号
- 每个星期五;每个月底
这是受到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库执行日期解析,但不执行上述日期范围解析。 -
Python-dateutil - 通过
rrule支持循环日期,非常实用,但仍然不支持解析。 - Python-crontab 和 Python-croniter 接受标准的 Unix crontab 语法(并允许指定工作日等),但这种语法仍然过于技术性,我想尽可能避免使用它。
- Arrow 和 Parsedatetime 不支持该功能。
那么,是否有 Python 代码 sn-p 或我错过的库来执行此操作?如果没有,我将自己编写解析器。如果它看起来还不错,想以开源形式发布它。
【问题讨论】:
标签: python django date python-dateutil python-datetime