Как сопоставить dateuilts.rrule и python icalendar

Я имею дело с некоторыми проблемами.

У меня есть событие.

BEGIN:VEVENT
UID:Event/termine/gps/akt@portal.augusta.de 
DTSTART;TZID=CET:20150529T190000
DTEND;TZID=CET:20150529T220000
CATEGORIES:Arbeitsgruppe
DTSTAMP:20110620T075538Z
EXDATE;TZID=CET:20151225T190000
LAST-MODIFIED:20150424T201707Z
LOCATION:Vereinsräume des Augsburger Computer Forum e.V.
PRIORITY:5
RRULE:FREQ=MONTHLY;BYDAY=-1FR
SUMMARY:GPS-Arbeitsgruppe
URL:https://www.augusta.de/termine/gps
END:VEVENT

Как вы можете видеть, RRule повторяет это событие каждую последнюю пятницу месяца.

Я разобрал это с icalendar.

Я использую:

start = iobj.get( 'DTSTART' ).dt
rrset = rruleset()
rrule = iobj.get( 'RRULE' )
exdate = iobj.get( 'EXDATE' )
rrset.rrule( rrule.rrulestr( rule.to_ical(), dtstart = start ) )
for edate in exdate.dts : 
    rrset.exdate( edate.dt )

Пока все работает просто отлично.

Когда я пытаюсь получить следующее, скажем, 10 дат с:

list(rrset)[:10] 

Я получил:

[datetime.datetime(2015, 5, 29, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 6, 26, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 7, 31, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 8, 28, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 9, 25, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 10, 30, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 11, 27, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 12, 25, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2016, 1, 29, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2016, 2, 26, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)]

На первый взгляд это кажется нормальным, но при более глубоком рассмотрении возникает проблема, начинающаяся с 30 октября, переход на летнее время заканчивается 25 октября, но информация tzinfo об объекте datetime по-прежнему "DstTzInfo 'CET' CEST+2:00:00 DST"

Вторая проблема заключается в том, что 25 декабря находится в этом списке, а не пропущено указанное в EXDATE. Проблема показывает, что при разборе правила перехода на летнее время корректно рассчитывается летнее время, и поэтому обновление 19:00:00+01:00 не соответствует расчетному времени повторения 19:00:00+02:00.

Я что-то там не так делаю?

Преобразование всего в UTC и обработка там не помогают, потому что 17:00:00 UTC также не совпадают с 18:00:00 UTC.

0 ответов

Другие вопросы по тегам