Надежное и полное расширение или RRULE в Python
Используя dateutil.rrulestr, мне удается расширить некоторые повторения, например, такие, которые выглядят следующим образом:
DTSTART;TZID=Europe/Zurich:20100930T183000
DTEND;TZID=Europe/Zurich:20100930T193000
RRULE:FREQ=DAILY;UNTIL=20101005T163000Z
BEGIN:VTIMEZONE
...
используя, например:
my_rrule.between(datetime.datetime(2010, 10, 2, 11, 00, tzinfo=pytz.utc),
datetime.datetime(2010, 10, 9, 11, 00, tzinfo=pytz.utc)))
Тем не менее, это дает мне только дату начала для событий, а не дату окончания. Есть ли способ получить время окончания тоже? (чище, чем вычислять начальную дельту самостоятельно и применять ее при каждом запуске).
Кроме того, некоторые повторения могут быть для событий на весь день и быть в форме:
DTSTART;VALUE=DATE:20120225
DTEND;VALUE=DATE:20120226
RRULE:FREQ=WEEKLY;BYDAY=SA
BEGIN:VTIMEZONE
...
Если я пытаюсь расширить этот с тем же вызовом между (), я получаю ошибку:
TypeError: can't compare offset-naive and offset-aware datetimes
Есть ли какой-нибудь запрос, который бы работал для любого вида повторения (в идеале, возвращая значения даты или даты и времени, в зависимости от случая)?
1 ответ
dateutil.rrule
и друзья не имеют понятия о продолжительности: они повторяют правила мгновений во времени.
Мое решение было заменить rruleset
с пользовательским классом, который также принимает продолжительность (или предоставляет класс по умолчанию).
Затем я могу сгенерировать вхождения и привязать к каждому вхождению его длительность, чтобы определить интервал.