2012-10-02 47 views
3

所以我正在通过python制作一个小的App Engine应用程序,它从文件中读取一个时间表并将它放入您的Google日历中。时间表中的所有时间/日期都独立于DST,因此我需要以相同的方式进行事件。由于所有事件在多个DST周期内每周重复发生,这变得更加复杂。使用Google Calendar API在夏令时中创建周期性事件的错误?

我正在使用Calender API V3。

我开始为此创建自己的日历。

calander = { 
    'summary': 'Calender Name, 
    'location': 'Somewhere in Ireland', 
    'timeZone': 'GMT', 
} 

然后,我与许多不同的周期性事件

event = { 
    'summary': 'CS101', 
    'description': 'Intro to Comp Sci', 
    'location': 'Bla bla bla', 
    'start': { 
     'dateTime': '2012-10-03T10:00:00.000-00:00', 
     'timeZone': 'GMT' 
    }, 
    'end': { 
     'dateTime': '2012-10-03T11:00:00.000-00:00', 
     'timeZone': 'GMT' 
    }, 
    'recurrence': [ 
     'RRULE:FREQ=WEEKLY;UNTIL=20121231', 
    ], 
} 

在我的实际过程中的程序,所有这些字符串的被动态生成填充它,但我这里没有问题。

问题是,在夏令时夏令时期间发生的任何事件会自动放置在我给它的时间后面1个小时。我确定这是一个错误,因为我将事件和日历的时区设置为GMT,但GMT没有遵守夏令时。对于我喂食的时间,我们不应该做任何事情。

例如,时间表表示事件持续时间从上午10点到上午11点,每个星期一从9月1日到12月31日。如果将这些信息输入日历,10月28日之前的所有事件(欧洲回落日期)将比时间表的时间晚一个小时。夏季以外的所有时间都很好。

如果我告诉日历上午10点事件开始,我不希望它调整DST。这怎么可以避免?

+0

我不熟悉的G-APP-引擎,但它是相当肯定地说,一个划时代的时间结构是引擎盖下。所以基本上在两个连续日期之间有一个数量为n的时代跳跃。 –

+0

您是否尝试过UTC而不是GMT时区?格林尼治标准时间可能被解释为英国时区,夏季改变为BST。 –

+0

@MarkReed,是的,我已经尝试过以及不同时区的不同组合 –

回答

1

它是否可以在start.dateTime和end.dateTime中定义一个时区?如果这样做,我看起来像timeZone字段没有完全识别。尝试将您的日期从“2012-09-26T10:00:00.000-00:00”更改为“2012-09-26T10:00:00.000”[API->start.dateTime]

由于GMT没有DST,日历事件为您指定的日期事件,从格林威治标准时间10:00开始,当您将当地时间设置为“欧洲/都柏林”时查看日历视图时,这些事件将在11:00开始,夏令时为+1。

我不知道你的意思与“独立”时区的,但什么:

1)如果您希望开始在10:00爱尔兰时间每周到十二月(在墙上,如图所示重复事件时钟),试试这个:

{ 
    "start": { 
    "dateTime": "2012-09-26T10:00:00.000", 
    "timeZone": "Europe/Dublin" 
    }, 
    "end": { 
    "dateTime": "2012-09-26T11:00:00.000", 
    "timeZone": "Europe/Dublin" 
    }, 
    "summary": "CS101 Dublin", 
    "description": "Intro to Comp Sci", 
    "location": "Bla bla bla", 
    "recurrence": [ 
    "RRULE:FREQ=WEEKLY;UNTIL=20121131" 
    ] 
} 

2)如果你是想要事件在格林尼治标准时间10:00每周开始至十二月(如图上总是被设置为在爱尔兰冬季时间)的时钟,尝试这个:

{ 
    "start": { 
    "dateTime": "2012-09-26T10:00:00.000", 
    "timeZone": "GMT" 
    }, 
    "end": { 
    "dateTime": "2012-09-26T11:00:00.000", 
    "timeZone": "GMT" 
    }, 
    "summary": "CS101 GMT", 
    "description": "Intro to Comp Sci", 
    "location": "Bla bla bla", 
    "recurrence": [ 
    "RRULE:FREQ=WEEKLY;UNTIL=20121131" 
    ] 
} 

这将创建一个事件,该事件在时区设置为“欧洲/都柏林”的日历用户界面中显示的时间为11:00至2012-10-31,时间为10:00。您可以尝试在花按钮 - >设置 - >您的时区中的日历界面中的不同时区显示之间进行切换。

但我的猜测是你想要(1)在这里,因为它听起来像一个CS课程,将开始于本地时间指定的时间。

顺便说一句,想事情的时候了,如果找到API资源管理器非常方便:https://developers.google.com/apis-explorer/#s/calendar/v3/

+0

问题是最后的-00.00。谢谢 –

0

GMT对夏令时并不明智。 你应该使用当地时间(在爱尔兰 - IST的情况下)。 说明。不同的国家有不同的日期来开始和结束DST。

+0

IST不是一个有效的时区,如果我将所有提及的'GMT'改为'Europe/Dublin',结果仍然是错误的,但是有点不同。这次即使通过DST期间,经常性事件也会保持原来的不正确时间 –

+0

如何检查存储的时间?你在请求中使用时区参数吗? – user1658078

相关问题