5

问题。在我的 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-crontabPython-croniter接受标准的 Unix crontab 语法(并允许指定工作日等),但这种语法仍然过于技术性,我想尽可能避免使用它。
  • ArrowParsedatetime不支持该功能。

那么,是否有 Python 代码片段或我错过的库来做这件事?如果没有,我将自己编写解析器。如果它看起来还不错,想在开源中发布它。

4

1 回答 1

7

Recurrent是一个支持循环日期的自然语言日期解析库。它与您提供的 API 不匹配,但允许您创建可与 Pythondatetime库一起使用的规则。

从他们的 Github 页面:

日期和重复事件的自然语言解析

例子

日期时间

  • 下个星期二
  • 明天
  • 一个小时内

重复事件

  • 在工作日
  • 从 2010 年 1 月 1 日到 2020 年 12 月 25 日,每个月的第四个月
  • 每个星期四到下个月
  • 每年 11 月的第四个星期四
  • 周二和周四 3:15

凌乱的琴弦

  • 请将会议安排在每隔一个星期二的中午举行
  • 设置下周二晚上 11 点的闹钟
于 2014-04-26T21:52:46.357 回答