使用Google Calendar API在夏令时中创建重复活动的错误?

时间:2012-10-02 20:32:37

标签: python google-app-engine datetime calendar timezone

所以我正在通过python创建一个小型App Engine应用程序,它从文件中读取时间表并将其放入Google Calender。时间表中的所有时间/日期都与DST无关,因此我需要以相同的方式输入事件。由于所有事件在多个夏令时期间每周重复发生,因此这很复杂。

我正在使用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没有观察到夏令时。在我吃饭的时候,什么都不应该做。

例如,时间表表示活动时间为9月1日至12月31日每个星期一上午10点至上午11点。如果将此信息输入日历,则10月28日之前的所有事件(欧洲退回日期)将比时间表的时间晚一个小时。夏季以外的所有时间都很好。

如果我告诉日历一个事件在上午10点开始,我不希望它为夏令时调整。如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

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

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

我不确定你对“独立”时区的意思,但是:

1)如果您希望定期活动从爱尔兰时间每周10:00开始,直至12月(如您的挂钟所示),请尝试:

{
  "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开始,直到12月(如爱尔兰一直设定为冬季的时钟所示),请尝试:

{
  "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"
  ]
}

这将创建一个事件,当在时区设置为“Europe / Dublin”的日历UI中显示时,该事件将在11:00到2012-10-31,它将在10:00开始。您可以尝试在花卉按钮 - >设置 - >您的时区的日历UI中的不同时区显示之间切换。

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

顺便说一下,如果找到API资源管理器非常方便,那么在尝试时:https://developers.google.com/apis-explorer/#s/calendar/v3/

答案 1 :(得分:0)

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