All-day 事件未在 Office 365 中正确创建

All-day events are not created correctly in Office 365

我正在尝试通过 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
}

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

当你使用f.ex。 EWS,您通常设置会议的时区,但是这似乎是不可能的。

我试图用时区信息提供开始和结束,但我得到一个 400 告诉我它必须以 UTC 提供。因此,据我所知,我无能为力,希望微软能解决这个问题。还是我遗漏了什么?

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

API 现在支持时区。您在这里要做的不是将 StartEnd 指定为 UTC(由末尾的 'Z' 前缀表示),而是在您的时区中指定它。然后,您可以将 StartTimeZoneEndTimeZone 值设置为 "Central European Time"。所以像这样:

{
  "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"
}