【问题标题】:Python solution to parse Google calendar's recurrencies解析谷歌日历重复的Python解决方案
【发布时间】:2012-08-08 23:00:30
【问题描述】:

我正在尝试解析 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 和其他 iCaledar 的字段。 是否有这样做的现有解决方案?

【问题讨论】:

  • 你有什么问题?你想解析整个记录,了解 RRULE 行的格式,还是别的?
  • 我想解析整个记录并提取事件的 DTSTART、DTEND、RRULE 和 RDATE。

标签: python google-calendar-api icalendar


【解决方案1】:

您可以尝试出色的库 python-dateutil (http://labix.org/python-dateutil)。

【讨论】:

  • 我试过这个库,但它只兼容 iCaledar,不理解 DTEND 字段和其他附加功能。
  • 对于 DTEND,您可以使用 until 作为 rrule 参数。 ¿您还需要什么其他附加功能?
  • @cleg:不要将 iCalendar-the-standard(RFC 2445,现为 RFC 5545)与 iCalendar-the-program 混淆。您在上面显示的日历采用 iCalendar-the-format。
  • 这也是我结束的地方。我使用 strptime 对 ical dtstart 进行了一些简单的解析,然后将其传递给 dateutil.rrule.rrulestr。
【解决方案2】:

我正在使用 mxm 的 icalendar 包:

http://codespeak.net/icalendar/

我很确定它会将所有 ical 字段传递给已解析的对象。我不确定是否会再次发生,因为我只是不在我的应用中使用它,但我会惊讶地发现它不存在。

【讨论】:

【解决方案3】:

由于我有类似的问题并且找不到任何工作,我刚刚在 pypi 上发布了一个小项目,它不仅会为您提供 DTSTART、DTEND、RRULE、RDATE、UID 和 Summary 值,而且还会给定一个特定的时间窗口,返回满足 RRULE 规则的所有日期。

你可以在这里得到它:http://pypi.python.org/pypi/pyICSParser(请注意我根本不是软件工程师,所以良好的编码实践合规性很差,虽然我会处理文档但仍处于早期阶段)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多