0

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

这就是我的 API URL 的样子

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'."
   }
}

我真的很感激任何帮助,因为我花了几天时间试图解决这个问题,而且我几乎没有所有的想法..

4

1 回答 1

0

前段时间我在 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”表示 2014 年 4 月 1 日凌晨 2 点,无论您的用户所在的时区是什么。要转换回 UTC,您需要减去与本地时间的偏移量。因此,您的时间中的 2014 年 4 月 1 日凌晨 2 点映射到 UTC 前 11 小时,即 2014 年 3 月 31 日下午 3 点(您输入的时间)。

如果您使用 Z,这意味着您实际上是在指定 UTC 时间。因此,要为您的活动获得所需的时间,您需要花费所需的时间并找出相应的 UTC 时间。因此,如果您的用户的 UTC 偏移量为 +1100,则您需要从事件的本地时间中减去该偏移量以计算 UTC 时间。在您的情况下,我相信这将是 2014-03-31T04:00:00Z。这实际上是最好留给编码而不是试图弄清楚如何自己做的事情。如果您查看http://isdk.dev.live.com上的“创建日历事件”示例,它会向您展示如何在 JavaScript 中执行此操作 - 也许有一个 PHP 等价物。*


于 2014-04-29T17:32:40.860 回答