谷歌日历 API 不接受具有正 UTC 偏移量的日期时间?



我正在开发一个iOS应用程序,它可以访问谷歌日历来显示即将到来的直播日期。

Google声称对于任何需要DateTime的参数,它必须被格式化为ISO 8601,我理解应该是这样的:2015-05-17T18:49:11-07:00(我住在南加州,通常是UTC-08:00,但现在是UTC-07:00,因为夏令时)无论如何,在我自己的测试中,我的应用程序生成如下url:

https://www.googleapis.com/calendar/v3/calendars/CALENDAR_IDENTIFIER/events?orderBy=startTime&q=Live&singleEvents=true&timeMin=2015-05-17T18:49:11-07:00&timeMax=2015-06-16T18:49:11-07:00&key=API_KEY

这些都工作得很好,它们返回预期的日历数据

然而,我最近刚刚添加了一个住在新西兰的测试人员,他在UTC+12:00。他的应用程序生成如下url:

https://www.googleapis.com/calendar/v3/calendars/CALENDAR_IDENTIFIER/events?orderBy=startTime&q=Live&singleEvents=true&timeMin=2015-05-17T13:49:11+12:00&timeMax=2015-06-16T13:49:11+12:00&key=API_KEY

然而,对于他来说,他们不工作,他们从谷歌返回"400个坏请求"错误。

我做了一些实验,在我的发现中,我尝试的任何负的UTC偏移量都可以正常工作(例如夏威夷,谁是UTC-11:00,安克雷奇是UTC-09:00),但是没有一个正的GMT偏移量工作(新西兰@ UTC+12:00,日本@ UTC+09:00)

我做错了什么?

编辑:我现在通过将我所有的时间转换为UTC并指定它们为,例如2015-05-17T18:49:11Z,然后添加timeZone=America/Los_Angeles(或Asia/Tokyo或无论用户在哪里)到API调用来解决这个问题。谷歌似乎接受了这一点。我仍然想知道为什么,即使他们声称ISO 8601格式字符串被接受,他们实际上不是(这是特别奇怪/令人费解/令人沮丧的考虑到谷歌的答复,即实际的日历数据,我的应用程序接收,事实上,实际上包含ISO 8601日期字符串与正偏移,如2015-06-15T09:00:00+09:00。)

是的,这似乎是一个错误。我在西班牙(UTC+01:00),我对此感到疯狂,因为响应数据是用正偏移量格式化的。

我将它用于http请求中的timeMin参数,以仅获取未来事件。最终将当前日期时间添加最后一个"Z"作为字符串。显然工作得很好,但我在同一个时区的日历已经定义。如果不是这样的话,我猜如果你想用小时岁差,你就有问题了。

timeZone参数显然只用于响应数据

如果+被编码为%2B

相关内容

  • 没有找到相关文章

最新更新