【问题标题】:Parsing human-readable recurring dates in Python在 Python 中解析人类可读的重复日期
【发布时间】: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-crontabPython-croniter 接受标准的 Unix crontab 语法(并允许指定工作日等),但这种语法仍然过于技术性,我想尽可能避免使用它。
  • ArrowParsedatetime 不支持该功能。

那么,是否有 Python 代码 sn-p 或我错过的库来执行此操作?如果没有,我将自己编写解析器。如果它看起来还不错,想以开源形式发布它。

【问题讨论】:

    标签: python django date python-dateutil python-datetime


    【解决方案1】:

    Recurrent 是一个库,它将进行自然语言日期解析并支持重复日期。它与您提供的 API 不匹配,但允许您创建可与 Python 的 datetime 库一起使用的规则。

    来自他们的 Github 页面:

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

    示例

    日期时间

    • 下周二
    • 明天
    • 一小时后

    重复事件

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

    凌乱的字符串

    • 请将会议安排在每隔一个星期二的中午举行
    • 设置下周二晚上 11 点的闹钟

    【讨论】:

    • 非常感谢!这正是我一直在寻找的东西!
    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多