3

因此,我正在通过 python 制作一个小型 App Engine 应用程序,该应用程序从文件中读取时间表并将其放入您的 Google 日历中。时间表中的所有时间/日期都独立于 DST,因此我需要以相同的方式放入事件。由于所有事件都在多个 DST 期间每周重复发生,这使情况变得复杂。

我正在使用日历 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',
    ],
}

当然,在我的实际程序中,所有这些字符串都是动态生成的,但我在这里没有问题。

问题是在夏令时 DST 期间发生的任何事件都会自动比我给出的时间晚 1 小时。我确信这是一个错误,因为我将事件和日历的时区设置为 GMT,但 GMT 不遵守夏令时。对我喂食的时间不应该做任何事情。

例如,时间表显示,从 9 月 1 日到 12 月 31 日,每周一上午 10 点到 11 点举行活动。如果将此信息输入日历,则 10 月 28 日(欧洲后备日期)之前的所有事件将比时间表的时间晚一小时。夏季以外的所有时间都很好。

如果我告诉日历活动从上午 10 点开始,我不希望它针对 DST 进行调整。如何避免这种情况?

4

2 回答 2

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 GMT 开始,当查看日历视图并将您的本地时间设置为“欧洲/都柏林”时,这些事件将从 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 GMT 开始直到 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"
  ]
}

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

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

顺便说一句,如果发现 API 资源管理器非常方便,则在尝试时:https ://developers.google.com/apis-explorer/#s/calendar/v3/

于 2012-10-07T10:49:24.210 回答
0

GMT 对夏令时不敏感。您应该使用当地时间(在爱尔兰的情况下 - IST)。解释。不同的国家有不同的日期开始和结束 DST。

于 2012-10-06T21:08:05.037 回答