通过XML将重复活动添加到Google日历

时间:2009-08-13 19:11:03

标签: xml google-calendar-api rfc2445 rfc5545

我正在尝试通过Protocol API将重复出现的事件添加到我的日历中。我从我在Google界面中创建的事件中获取了重复标记的语法,并在我的创建请求中使用了该语法。这是我提交的内容:

<?xml version='1.0' encoding='utf-8' ?> 
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'> 
    <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category> 
    <title type='text'>Hi Stack Overflow!</title> 
    <content type='text'>Help me please!</content> 
    <gd:where valueString='StackOverflow.com'></gd:where> 
    <gd:recurrence>
        DTSTART;TZID=America/Los_Angeles:20090824T080000
        DTEND;TZID=America/Los_Angeles:20090824T090000 
        RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T090000 
        BEGIN:VTIMEZONE TZID:America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles 
        BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 
        RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 
        END:DAYLIGHT 
        BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 
        RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 
        END:STANDARD 
        END:VTIMEZONE
    </gd:recurrence> 
 </entry>

事件已添加,但不会重复。当我查看结果事件提要的重复部分时,定义重复的RRULE不存在。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

两件事:

  1. 您的时区部分无效 - 我相信每个属性都应该独立。

  2. 您的“UNTIL”应为UTC时间。来自RFC2445:

  3.   

    如果指定为日期时间值,则必须以UTC时间格式指定。

    所以这是一个完整的例子,已经将“直到”部分的本地时间调整为UTC,并扩展了时区:

    DTSTART;TZID=America/Los_Angeles:20090824T080000
    DTEND;TZID=America/Los_Angeles:20090824T090000 
    RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T160000Z
    BEGIN:VTIMEZONE
    TZID:America/Los_Angeles
    X-LIC-LOCATION:America/Los_Angeles 
    BEGIN:DAYLIGHT
    TZOFFSETFROM:-0800
    TZOFFSETTO:-0700
    TZNAME:PDT
    DTSTART:19700308T020000 
    RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 
    END:DAYLIGHT 
    BEGIN:STANDARD
    TZOFFSETFROM:-0700
    TZOFFSETTO:-0800
    TZNAME:PST
    DTSTART:19701101T020000 
    RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 
    END:STANDARD 
    END:VTIMEZONE
    

    我怀疑这个可能是最近的变化。

    或者,您可能想要尝试完全省略VTIMEZONE部分 - 只提供TZID,它应该是您知道Google Calendar支持的ID。例如:

    DTSTART;TZID=America/Los_Angeles:20090824T080000
    DTEND;TZID=America/Los_Angeles:20090824T090000 
    RRULE:FREQ=DAILY;WKST=SU;UNTIL=20090828T160000Z