全天活动未在Office 365中正确创建

Chr*_*olm 5 api rest office365

我正在尝试通过其REST API https://msdn.microsoft.com/office/office365/APi/calendar-rest-operations#EventoperationsCreateevents将一些事件导出到Office 365中的日历。

我将设置IsAllDay为true,并将开始时间和结束时间设置为UTC。

有效负载如下所示:

{
  "Body": {
    "Content": "Agenda",
    "ContentType": "HTML"
  },
  "End": "2015-02-01T00:00:00Z",
  "ShowAs": "Busy",
  "Start": "2015-01-30T00:00:00Z",
  "ChangeKey": "X2+akAeClEa0OJ8r6nC5QgABW30vaQ==",
  "Location": {
    "DisplayName": "Vesterbrogade"
  },
  "Subject": "Updated title",
  "IsAllDay": true
}
Run Code Online (Sandbox Code Playgroud)

看起来不错,如果我再次获取该事件,则有效负载会按设置返回。但是,当我访问outlook.office365.com时,该事件现在跨越2天,而不是预期的1天。但是,持续时间显示为1天。在Outlook中取消单击“全天”即可发现问题。由于我处于中欧时间,所以我比UTC早一小时。开始显示为2015-01-30 01:00,结束显示为2015-02-01 00:59。因此,在幕后看来,它似乎并没有存储为我所在时区的全天事件。

当您使用f.ex. EWS,您通常设置会议的时区,但是似乎无法实现。

我尝试提供时区信息的开始和结束,但是我得到400告诉我必须使用UTC进行提供。据我所知,我无能为力,希望微软会解决此问题。还是我错过了什么?

编辑:该事件实际上在Mac的Outlook中正确显示,所以也许这只是OWA中的一个问题,位于Outlook.office365.com。

Jas*_*ton 5

API 现在支持时区。您在这里要做的不是将您的Start和指定End为 UTC(由末尾的“Z”前缀表示),而是在您的时区中指定它。然后将StartTimeZoneEndTimeZone值设置为“中欧时间”。所以像这样:

{
  "Body": {
    "Content": "Agenda",
    "ContentType": "HTML"
  },
  "Start": "2015-01-30T00:00:00+01:00",
  "End": "2015-02-01T00:00:00+01:00",
  "ShowAs": "Busy",
  "Location": {
    "DisplayName": "Vesterbrogade"
  },
  "Subject": "Updated title",
  "IsAllDay": true,
  "StartTimeZone": "Central European Standard Time",
  "EndTimeZone": "Central European Standard Time"
}
Run Code Online (Sandbox Code Playgroud)