我正在处理一些琐事.
我有一个ical事件.
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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,每个月的最后一个星期五有一个RRule重复这个事件.
我用icalendar解析了这个ical.
我正在使用:
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 )
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好.
当我尝试下一个说10个日期时:
list(rrset)[:10]
Run Code Online (Sandbox Code Playgroud)
我明白了:
[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>), …Run Code Online (Sandbox Code Playgroud)