繁体   English   中英

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

[英]Parsing human-readable recurring dates in Python

问题。 在我的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代码片段或我错过的库来做这件事? 如果没有,我将自己编写解析器。 如果它看起来不是太糟糕,想在开源中发布它。

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

从他们的Github页面:

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

例子

日期时间

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

重复发生的事件

  • 在工作日
  • 从2010年1月1日到2020年12月25日,每月四分之一
  • 每个人一直到下个月
  • 11月的第四个星期四,每年一次
  • 星期二和星期四3点15分

凌乱的弦乐

  • 请在周二中午每隔一天安排一次会议
  • 下周二晚上11点设置闹钟

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM