Google Calendar API 400错误

时间:2013-06-16 13:19:42

标签: api google-calendar-api

我正在尝试在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对象/格式有关?但我不知道是什么。我真的很感激一些帮助;我已经打了一个星期反对这一个星期!

4 个答案:

答案 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)

简而言之,timeMintimeMax变量都缺少时区偏移,即使您设置了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要求timeMintimeMax

  

必须是具有强制时区偏移的RFC3339时间戳,   例如,2011-06-03T10:00:00-07:00、2011-06-03T10:00:00Z。毫秒   可以提供但被忽略。如果设置了timeMax,则timeMin必须为   小于timeMax。

因此,您可以选择2012-01-31T09:00:00-5:002012-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'