【问题标题】:Google Calendar API: TimeZone not taken into account by google server?谷歌日历 API:谷歌服务器没有考虑时区?
【发布时间】:2013-05-11 12:21:22
【问题描述】:

我正在玩谷歌日历程序界面:

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 刚刚将 .01Z 变成了 .00Z 没有 chanight 19:30 到 20:30 和 20:30 至 21:30。这是怎么回事?我的语法错了吗?如果是那怎么办?

谢谢。

【问题讨论】:

  • 我遇到了同样的问题。 Google API 不考虑时区。我正在传递“timezone”:“America/Los_Angeles”,Google 仍在将时间转换为 GMT。

标签: rest timezone google-calendar-api


【解决方案1】:

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

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

【讨论】:

  • 我正在这样做,但如果我将时区设置为“GMT+1:00”、“GMT+1”、“GMT”为“欧洲/伦敦”,返回的事件仍然相同“或者即使我根本没有设置它。它们都是美国西海岸时间,出于某种原因,这是日历的时区。我错过了该输入参数的用途还是被忽略了?
  • 您是否尝试过删除 .01Z 或 .00Z?已经有一段时间了,但如果我没记错的话,Z 表示祖鲁时间或俗称的格林威治标准时间。这可能就是您仍然获得 GMT 结果的原因。
  • 谢谢。但是删除“Z”或添加“.00Z”或“.06Z”或其他类似的东西都会产生相同的结果......
【解决方案2】:

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

如果您想将时区偏移定义为 +01,则​​使用的格式肯定是+01:00。所以你的例子应该是2013-04-07T20:30:00+01:00

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

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

【讨论】:

    【解决方案3】:
    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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多