Python 解析 Google 日历重复事件的解决方案

3 投票
3 回答
2071 浏览
提问于 2025-04-16 06:51

我正在尝试解析谷歌日历(GCal)中的重复事件字段。通常,这个字段的内容看起来像这样:

DTSTART;TZID=Europe/Kiev:20101111T140000
DTEND;TZID=Europe/Kiev:20101111T150000
RRULE:FREQ=DAILY;UNTIL=20101112T120000Z
BEGIN:VTIMEZONE
TZID:Europe/Kiev
X-LIC-LOCATION:Europe/Kiev
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:19700329T030000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19701025T040000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE

我需要提取对我有用的部分:事件的开始时间(DTSTART)、结束时间(DTEND)、重复规则(RRULE)以及其他日历字段。有没有现成的解决方案可以做到这一点呢?

3 个回答

0

我遇到了类似的问题,找不到合适的解决办法,所以我在pypi上发布了一个小项目。这个项目不仅能给你提供 DTSTART、DTEND、RRULE、RDATE、UID 和 SUMMARY 这些值,还能在你指定的时间范围内,返回所有符合 RRULE 规则的日期。

你可以在这里获取它:http://pypi.python.org/pypi/pyICSParser(请注意,我并不是专业的软件工程师,所以代码质量可能不太好,虽然我会努力完善文档,但目前还处于早期阶段)

1

我正在使用mxm的icalendar包:

http://codespeak.net/icalendar/

我很确定它会把所有的ical字段都传递给解析后的对象。至于重复事件,我在我的应用中并没有使用这个功能,所以不太确定,但如果发现它不支持这个功能我会感到很惊讶。

3

你可以试试这个很棒的库,叫做python-dateutil(http://labix.org/python-dateutil)。

撰写回答