Надежное и полное расширение или RRULE в Python - PullRequest
1 голос
/ 24 февраля 2012

Используя 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
...

Если я пытаюсь расширить этот с помощью одного и того же вызова each (), я получаю сообщение об ошибке:

TypeError: can't compare offset-naive and offset-aware datetimes

Есть ли какой-нибудь запрос, который будет работать для любого вида повторения (в идеале, возвращая значения даты или даты и времени,в зависимости от случая)?

1 Ответ

1 голос
/ 21 июня 2012

dateutil.rrule и друзья не имеют понятия о продолжительности: они повторяют правила мгновений во времени.

Мое решение состояло в том, чтобы заменить rruleset пользовательским классом, который также принимает продолжительность (или предоставляет значение по умолчанию).

Затем я могу сгенерировать вхождения и привязать к каждому вхождению его продолжительность, чтобы определить интервал.

...