在Python中解析人类可读的重复日期

2024-10-16 20:44:16 发布

您现在位置:Python中文网/ 问答频道 /正文

问题。在我的Django应用程序中,用户创建用于计划执行的任务。用户是非常非技术性的,如果他们能够编写常规的人类可读表达式来定义何时执行某个任务,这将是一件好事,例如:

  • 每周一
  • 每周五、周三
  • 每天
  • 每月1、14、20日
  • 每个月底;每周五

{就是受这个启发。目前,只有日期是必要的,没有时间。我花了几个小时在谷歌上搜索一个图书馆来做这件事,但是没有什么运气。我期待一个函数,比如,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语法(并允许指定工作日等),但这样的语法仍然是一种技术性太强的方法,如果可能的话,我想避免它。在
  • Arrow和{a6}不支持该功能。在

那么,有没有一个Python代码片段,或者一个我错过的库来完成这个任务呢?如果没有,我将自己编写解析器。如果看起来还不错的话,希望在开源环境下发布它。在


Tags: django用户in功能应用程序标准date语法
1条回答
网友
1楼 · 发布于 2024-10-16 20:44:16

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

从他们的Github页面:

Natural language parsing of dates and recurring events

Examples

Date times

  • next tuesday
  • tomorrow
  • in an hour

Recurring events

  • on weekdays
  • every fourth of the month from jan 1 2010 to dec 25th 2020
  • each thurs until next month
  • once a year on the fourth thursday in november
  • tuesdays and thursdays at 3:15

Messy strings

  • Please schedule the meeting for every other tuesday at noon
  • Set an alarm for next tuesday at 11pm

相关问题 更多 >