6

我在玩谷歌日历编程界面:

https://developers.google.com/google-apps/calendar/v3/reference/events/insert#try-it

当我执行以下请求时,我得到以下响应:

要求:

POST https://www.googleapis.com/calendar/v3/calendars/o38t4tnqifv4kdanjkmegs2uqk%40group.calendar.google.com/events?key={YOUR_API_KEY}

Content-Type:  application/json
Authorization:  Bearer ya29.AHES6ZRv_qi4OhIhzN1C8YifUSO4mmXjufeKhaPmbyaRw3FVhXIgJQ
X-JavaScript-User-Agent:  Google APIs Explorer

{
"end": {
"dateTime": "2013-04-07T20:30:00.01Z"
},
"start": {
"dateTime": "2013-04-07T19:30:00.01Z"
},
"description": "Just testing, 2003.",
"extendedProperties": {
"private": {
"foo": "bar"
}
},
"summary": "Hello World 1"
}

回复:

200 OK

- Show headers -
{
"kind": "calendar#event",
"etag": "\"78Bu1G8fWt0vPGZK2Ckfad3ZtNE/Z2NhbDAwMDAxMzY4NzE0MzM1NTc3MDAw\"",
"id": "e2pfv3men0e9r5mv4qp7hrsqs8",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=ZTJwZnYzbWVuMGU5cjVtdjRxcDdocnNxczggbzM4dDR0bnFpZnY0a2RhbmprbWVnczJ1cWtAZw",
"created": "2013-05-16T14:25:35.000Z",
"updated": "2013-05-16T14:25:35.577Z",
"summary": "Hello World 1",
"description": "Just testing, 2003.",
"creator": {
"email": "jdoe@gmail.com"
},
"organizer": {
"email": "o38t4tnqifv4kdanjkmegs2uqk@group.calendar.google.com",
"displayName": "ClientEventManager",
"self": true
},
"start": {
"dateTime": "2013-04-07T19:30:00Z"
},
"end": {
"dateTime": "2013-04-07T20:30:00Z"
},
"iCalUID": "e2pfv3men0e9r5mv4qp7hrsqs8@google.com",
"sequence": 0,
"extendedProperties": {
"private": {
"foo": "bar"
}
},
"reminders": {
"useDefault": true
}
}

我认为 DateTime 条目末尾的 .01Z 将指定 +01 时区(欧洲中部时间),但似乎谷歌服务器只是忽略它并将其转换为 GMT(一小时时差)而不添加 1小时,将事件显示为在指定时间之外一小时发生。特别注意:

要求:

{
"end": {
"dateTime": "2013-04-07T20:30:00.01Z"
},
"start": {
"dateTime": "2013-04-07T19:30:00.01Z"
},

回复:

"start": {
"dateTime": "2013-04-07T19:30:00Z"
},
"end": {
"dateTime": "2013-04-07T20:30:00Z"
},

Google 刚刚在 19:30 到 20:30 和 20:30 到 21:30 的情况下将 .01Z 变成了 .00Z。这是怎么回事?我的语法错了吗?如果是,那怎么办?

谢谢。

4

3 回答 3

0

API 接受“timeZone”参数。您可能想尝试传递一个时区值,例如“GMT+1:00”或“UTC+1:00”。

我们之前在团队中遇到过类似的问题,我们只是在使用价值观来解决问题。

于 2013-08-01T06:14:19.580 回答
0

中的.01Z部分2013-04-07T20:30:00.01Z不是区偏移量。01定义毫秒数(在本例中为 10 毫秒)。该字符Z定义了实际的时区(UTC,在这种情况下也称为 Zulu)。

如果要将时区偏移量定义为 +01,则​​使用的格式肯定是+01:00. 因此,您的示例将改为2013-04-07T20:30:00+01:00.

来自https://en.wikipedia.org/wiki/ISO_8601

UTC 偏移以与上面的“Z”相同的方式附加到时间,格式为 ±[hh]:[mm]、±[hh][mm] 或 ±[hh]。

于 2021-01-09T12:08:34.197 回答
0
private String getFormatedDate(Date date)
    {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+05:30");
        df.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        return df.format(date);
    }
于 2021-07-23T16:29:01.350 回答