我正在使用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+1100
到2014-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'."
}
}
我会非常感谢任何帮助,因为我花了几天时间来解决这个问题,而且我几乎完全没有想法......
答案 0 :(得分:0)
前段时间我在MSDN论坛上发布了这个问题并忘了它,今天我访问了这个问题,这是我从Outlook团队解释如何理解UTC时区的reply,我希望这可以帮助某人我遇到了同样的问题,我希望他们把它包含在他们的文档中。这解决了我遇到的问题
*日期的ISO 8601格式可能有点令人困惑。您在回复中看到的内容实际上是正确的。日历服务 记录您的日期并将其映射到用户的时区。
" 2014-03-31T15:00:00-0000"指的是2014年3月31日下午3点 调整0小时0分钟转换为UTC时间。在 换句话说,这基本上是IS UTC时间。然后是日历服务 将其转换为您所在用户的本地时区 创建活动。 " 2014-04-01T02:00:00 + 1100"是指4月2日上午 2014年1月1日,适用于您的用户所在的任何时区。要翻译回来 UTC,您需要从当地时间减去偏移量。凌晨2点, 2014年4月1日,您的时间映射到UTC时间早11点,即下午3点 2014年3月31日(您输入的内容)。
如果您使用Z,则表示您实际上是在指定 UTC时间。因此,为了获得您需要的活动所需的时间 您想要的时间并找出相应的UTC时间。 因此,如果用户的UTC偏移量为+1100,则需要减去 偏离事件的当地时间来计算UTC 时间。在你的情况下,我相信这将是2014-03-31T04:00:00Z。这个 实际上是最好的代码,而不是尝试 弄清楚如何做自己。如果你看看"创建 日历活动"样本在http://isdk.dev.live.com它会告诉你如何 在JavaScript中执行此操作 - 可能有PHP等价物。*