簡體   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