Outlook 日历 API 正在自行增加小时数


Outlook Calendar API is incrementing the hours on its own

我正在使用PHP和Outlook Calendar REST API,我能够很好地创建事件,除了我给API创建事件的日期增加了11小时,而且end_date也有问题,例如,如果我告诉API从2014-03-31T15:00:00-0000创建事件到2014-03-31T16:00:00-0000它最终会创建从2014-04-01T02:00:00+11002014-04-01T02:30:00+1100

的事件

这是我的 API 网址的样子

https://apis.live.net/v5.0/9898ef90931244e8/events?name=testing_event&description=event_description&start_time=2014-03-31T15:00:00-0000&end_time=2014-03-31T16:00:00-0000&access_token=token-goes-here&method=POST

如果我最后删除-0000,则会收到以下错误

{
   "error": {
      "code": "request_parameter_invalid", 
      "message": "The value of input parameter 'start_time' isn't valid. The expected formats for this parameter are the following: '1970-01-01T00:00:00Z', '1970-01-01T00:00:00.000Z', '1970-01-01 00:00:00Z'. In all cases, 'Z' is interchangeable with a time zone offset of the form: '+00:00', '-00:00', '+0000' or '-0000'."
   }
}

我将非常感谢任何帮助,因为我花了几天时间试图解决这个问题,而且我几乎没有所有的想法。

不久前我在MSDN论坛上发布了这个问题并忘记了它,今天我访问了这个问题,这是我从Outlook团队得到的回复,解释了如何理解UTC时区,我希望这有助于遇到相同问题的人,我希望他们将其包含在他们的文档中。这解决了我遇到的问题


*日期的ISO 8601格式可能有点令人困惑。 你在回答中看到的实际上是正确的。 日历服务 获取您的日期并将其映射到用户的时区。

"2014-03-31T15:00:00-0000"表示 2014 年 3 月 31 日下午 3 点,带有 调整 0 小时 0 分钟以转换为 UTC 时间。 在 换句话说,这基本上是UTC时间。 然后日历服务 将其转换为您所在用户的本地时区 创建事件。 "2014-04-01T02:00:00+1100"表示4月凌晨2点 1, 2014,无论您的用户位于哪个时区。 要翻译回 UTC,您需要从本地时间中减去偏移量。 所以凌晨2点, 2014 年 4 月 1 日的时间映射到 UTC 时间早 11 小时,即下午 3 点 2014 年 3 月 31 日(您输入的内容(。

如果您使用的是 Z,这意味着您实质上是在指定 世界协调时时间。 因此,要为您的活动获得所需的时间,您需要采取 您想要的时间并找出相应的 UTC 时间是多少。 因此,如果用户的 UTC 偏移量为 +1100,则需要减去 与事件本地时间的偏移量,以计算 UTC 时间。 在您的情况下,我相信这将是 2014-03-31T04:00:00Z。这 实际上,最好留给代码而不是尝试 弄清楚如何做自己。 如果你看一下"创建 日历事件"示例 http://isdk.dev.live.com 它向您展示了如何 在 JavaScript 中执行此操作 - 也许有一个 PHP 等效项。