8

我正在尝试在 Google Calendar API 上执行一个简单的 freebusy 查询。我的授权一切正常,可以查看用户日历列表等。当我尝试提交忙/闲查询时,我收到 400 错误(据我所知)根本没有关于它的详细信息不喜欢。

无论是在我自己的代码中还是在我使用 Google 日历 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

4 回答 4

19

好的,我想通了,我将把答案留给其他对此失去理智的人。

尽管谷歌的文档在这种情况下对日期时间的格式有什么说法,但我可以使用的唯一格式是:

2008-03-07T17:06:02.000Z

所以这是 YYYY-MM-DDTHH:MM:SS.MMMZ

Z是干什么用的?我不知道,但它必须在那里。

于 2013-06-18T01:55:33.510 回答
1

我有同样的问题,但我设法通过从 DateTime 中删除“Z”并在 TimeZone 中将 GMT 与时差一起解决:

'dateTime': '2020-10-31T17:00:00.000',
'timeZone': 'GMT-03:00'
于 2020-10-30T06:17:46.660 回答
0

日期时间值应采用 UTC“TZ”格式。几乎所有 CRM 和公共 API 都接受这种格式的时间。如果您使用主要语言(例如 C 或 Java)库函数/方法将日期时间转换为 UTC 时间,它们将返回 YYYY-MM-DDTHH:MM:SS.MMMZ 格式的日期时间实例。

于 2016-11-30T04:21:57.230 回答
0

简而言之,您在timeMintimeMax变量中都缺少时区偏移量,即使您timeZone设置了变量也是必需的。

例如,我住在 America/New_York 时区,所以我的偏移量是-05:00,它需要附加到您当前拥有的值上。所以对我来说,价值观看起来像,

{
    ...
    "timeMin": "2012-01-31T09:00:00-05:00",
    "timeMax": "2012-01-31T10:00:00-05:00",
    ...
}

更具体地说,谷歌日历 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 日历事件列表 API文档是我从中获取所有信息的地方。

于 2019-11-05T02:51:19.393 回答