我正在尝试在Google Calendar API上执行简单的freebusy查询。我的授权一切正常,可以查看用户日历列表等。当我尝试提交忙/闲查询时,我得到400错误(据我所知)没有关于它的详细信息不喜欢。
在我自己的代码和使用Google Calendar API“试用”功能时都是如此。
这是我的请求(使用Try It小部件创建)和响应: 请求
POST https://www.googleapis.com/calendar/v3/freeBusy?key={YOUR_API_KEY}
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZTr-2wksEvp0iGPTnHTirTIItib5WwxmSAySq1ghfI98Cz88kA
X-JavaScript-User-Agent: Google APIs Explorer
{
"items": [
{
"id": "[my calendar id goes here]@group.calendar.google.com"
}
],
"timeMin": "2012-01-31T09:00:00",
"timeMax": "2012-01-31T10:00:00",
"timeZone": "GMT"
}
Response
400 Bad Request
cache-control: private, max-age=0
content-encoding: gzip
content-length: 122
content-type: application/json; charset=UTF-8
date: Sun, 16 Jun 2013 13:08:32 GMT
expires: Sun, 16 Jun 2013 13:08:32 GMT
server: GSE
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "Bad Request"
}
],
"code": 400,
"message": "Bad Request"
}
}
我认为它可能与dateTime对象/格式有关?但我不知道是什么。我真的很感激一些帮助;我已经打了一个星期反对这一个星期!
答案 0 :(得分:17)
好的,我想出来了,我正在为其他任何对此有所了解的人留下答案。
尽管Google的文档说明了这种情况下日期时间的格式,但我可以使用的唯一格式是:
2008-03-07T17:06:02.000Z
这样的 YYYY-MM-DDTHH:MM:SS.MMMZ
Z是什么?我不知道,但必须在那里。
答案 1 :(得分:0)
日期时间值应为UTC" TZ"格式。几乎所有的CRM和公共API都接受这种格式的时间。如果使用主要语言(例如C或Java)库函数/方法将datetime转换为UTC时间,则它们将返回YYYY-MM-DDTHH:MM:SS.MMMZ格式的日期时间实例。
答案 2 :(得分:0)
简而言之,timeMin
和timeMax
变量都缺少时区偏移,即使您设置了timeZone
变量,这也是必需的。
例如,我生活在America / New_York时区,因此我的偏移量为-05:00
,需要将其附加到当前的值之后。所以对我来说,值看起来像
{
...
"timeMin": "2012-01-31T09:00:00-05:00",
"timeMax": "2012-01-31T10:00:00-05:00",
...
}
更具体地说,Google Calendar API要求timeMin
和timeMax
必须是具有强制时区偏移的RFC3339时间戳, 例如,2011-06-03T10:00:00-07:00、2011-06-03T10:00:00Z。毫秒 可以提供但被忽略。如果设置了timeMax,则timeMin必须为 小于timeMax。
因此,您可以选择2012-01-31T09:00:00-5:00
或2012-01-31T09:00:00Z
(以毫秒为单位)(因为始终会忽略它)。
我从Google Calendar Events list API文档中获取了所有信息。
答案 3 :(得分:0)
我遇到了同样的问题,但我设法通过从DateTime中删除“ Z”并在TimeZone中将GMT设置为时差来解决了这个问题:
'dateTime': '2020-10-31T17:00:00.000',
'timeZone': 'GMT-03:00'