Google 日历 API 事件列表时区问题

Google Calendar API events list time zone issue

自上周中旬以来,我发现事件列表查询参数的上限和下限问题越来越多。自周末以来,它根本不再工作。

问题总结: 时间范围的事件列表查询参数中不再接受正时区偏移量。

Api 通话:

GET https://www.googleapis.com/calendar/v3/calendars/<myCalendarId>/events

查询参数:?timeMin=2020-12-01T09:31:04+0100

11 月 25 日左右之前的预期行为和行为,在某些服务器上直到 11 月 27 日:

{
    "kind": "calendar#events",
    "etag": "\"blahblah\"",
    "summary": "blahblah",
    "updated": "2020-12-01T07:46:56.357Z",
    "timeZone": "Europe/Berlin",
    "accessRole": "owner",
    "defaultReminders": [
        {
            "method": "popup",
            "minutes": 30
        }
    ],
    "nextSyncToken": "blahblah",
    "items": [
    ...

实际行为/响应正文:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "badRequest",
                "message": "Bad Request"
            }
        ],
        "code": 400,
        "message": "Bad Request"
    }
}

更多详情: 显然,“错误请求”响应仅由时区偏移前的加号 (+) 引起。将上述请求中的“+”更改为“-”将 return 得到预期的有效响应,只是偏移量是错误的(在本例中应该是两个小时)。 写入带或不带“:”的偏移量(例如 +01:00 与 +0100)不会影响结果。

很可能我错过了正时区偏移量的贬值之类的东西,或者我使用了错误的时间格式,因为我公认不是 RFC3339 方面的专家。

另一种选择是 Google 日历团队更新了他们的日历 API 中的解析器,并在此之后部署了一个错误。在这种情况下,应将测试用例添加到管道中以测试多个时区偏移量,包括限制。

我很乐意收到有关如何优雅地 select 和 UTC 以东时区的建议。 提前致谢!

没有这样的弃用,但是当你发出 HTTP 请求时你需要 URL encode 参数

样本:

https://www.googleapis.com/calendar/v3/calendars/primary/events?q=timeMin%3D2020-12-01T09%3A31%3A04%2B0100