for event in cal.vevent_list:
text = event.summary.value
- #print event
-
- # TODO: handle all-day events of +1 day duration
-
#detect all-day events vs. times
if isinstance(event.dtstart.value, datetime.datetime):
dtstart = event.dtstart.value.astimezone(centralTime)
dtend = event.dtend.value.astimezone(centralTime)
- elif isinstance(event.dtstart.value, datetime.date):
- #cannot handle this yet
- continue
- #dtstart = event.dtstart.value
- #dtend = event.dtend.value
- else:
- raise TypeError('unknown dtstart type: %s (%s)' %
- (event.dtstart.value, type(event.dtstart.value)))
-
- duration = str(dtend - dtstart)[:-3]
+ duration = str(dtend - dtstart)[:-3]
- if event.rruleset:
- for dtstart in event.rruleset.between(fromDate, untilDate, inc=True):
+ if event.rruleset:
+ for dtstart in event.rruleset.between(fromDate, untilDate, inc=True):
+ print >>outfile, remfmt_datetime % (
+ dtstart.strftime(datefmt),
+ dtstart.strftime(timefmt),
+ duration, text)
+ else:
print >>outfile, remfmt_datetime % (
dtstart.strftime(datefmt),
dtstart.strftime(timefmt),
duration, text)
- else:
- print >>outfile, remfmt_datetime % (
- dtstart.strftime(datefmt),
- dtstart.strftime(timefmt),
- duration, text)
+ elif isinstance(event.dtstart.value, datetime.date):
+ dtstart = event.dtstart.value
+ dtend = event.dtend.value
+
+ duration = dtend - dtstart
+ oneday = datetime.timedelta(days=1)
+
+ # all-day events end at start of next day (exclusive). Remind is
+ # inclusive
+ dtend = dtend - oneday
+ if event.rruleset:
+ print >>sys.stderr, '*** WARNING, ignoring repeating day event:'
+ print >>sys.stderr, event
+
+ print >>outfile, remfmt_date % (
+ dtstart.strftime(datefmt),
+ dtend.strftime(datefmt),
+ text)
+
+ else:
+ raise TypeError('unknown dtstart type: %s (%s)' %
+ (event.dtstart.value, type(event.dtstart.value)))