Как составить список дат с помощью rrule

Я создаю свой собственный парсер .ics.

Я использую модуль Python icalendar. Он отлично работает, но я хотел бы получить список дат и времени для событий, для которых установлено RRULE.

У меня есть начальная дата как экземпляр объекта datetime, а RRULE анализируется следующим образом:

CaselessDict({'FREQ': ['MONTHLY'], 'INTERVAL': [1], 'BYDAY': ['4TH']})

Но я не могу понять, как составить список даты и времени из этих двух вещей.

Спасибо


person Blaskovic    schedule 27.11.2013    source источник


Ответы (1)


Вы можете использовать библиотеку python-dateutil для создания rrule, например:

from dateutil.rrule import rrule, MONTHLY

dts = list(rrule(MONTHLY, interval=10, byweekday=4, count=3))
# [datetime.datetime(2013, 11, 29, 15, 44, 45), datetime.datetime(2014, 9, 5, 15, 44, 45), datetime.datetime(2014, 9, 12, 15, 44, 45)]

При необходимости отрегулируйте аргументы.

person Jon Clements♦    schedule 27.11.2013
comment
Так что я должен покрыть все возможности с некоторыми ЕСЛИ и другими? Их может быть много. - person Blaskovic; 27.11.2013
comment
@Blaskovic, зачем вам это делать ... Вы можете передать переменные из имеющегося у вас словаря, например: interval=your_CaselessDict['INTERVAL'] и т. Д. ... Возможно, вам придется создать сопоставление для частоты ... - person Jon Clements♦; 27.11.2013
comment
Потому что вы можете получить что-то вроде этого: WKST=SU;BYDAY=TU,TH См.: kanzaki .com/docs/ical/rrule.html - person Blaskovic; 27.11.2013
comment
@Blaskovic Хорошо .. поэтому убедитесь, что у вас есть импортированные константы from dateutil.rrule import MO, TU, WE, TH, FR, SA, SU и т. д. ... и вы сопоставляете TU как текст с переменной TU ... так что это заканчивается как byweekday=[TU,TH] и т. д. - person Jon Clements♦; 27.11.2013