首页 文章

Outlook REST API将来的重复活动将在错误的开始时间内创建

提问于
浏览
1

我正在使用REST API endpoints https://outlook.office.com/api/v1.0/me/events/在Outlook Live中创建 Session . Session 的有效载荷看起来像 -

{
  "Subject":"Test Meeting",
  "Location":{
    "DisplayName":""
  },
  "Start":"2017-03-02T18:00:00Z",
  "End":"2017-03-02T19:00:00Z",
  "Body":{
    "ContentType":"HTML",
    "Content":"<html><body>Test Meeting Content<\/body><\/html>"
  },
  "Recurrence":{
    "Pattern":{
      "Type":"Weekly",
      "Interval":1,
      "Month":0,
      "Index":"First",
      "FirstDayOfWeek":"Sunday",
      "DayOfMonth":0,
      "DaysOfWeek":["Thursday"]
    },
    "Range":{
      "Type":"EndDate",
      "StartDate":"2017-03-02",
      "EndDate":"2017-03-31"
    }},
    "Attendees":[
      {
        "EmailAddress":{
          "Address":"starstart@example.com"
        },
      "Type":"Required"
    }
  ]
}

对于一个月的每周重复活动,前两次发生的时间是在正确的时间创建的,但其余三个 Session 活动的创建时间延迟一小时(而不是UTC时间上午10:00,UTC时间上午11:00) .

我甚至尝试使用v2.0 endpoints 而没有运气 . 我也试过传递时区来满足开始日期和结束日期,但是它显示了相同的行为 .

有没有人遇到这个或类似的问题?任何指针都会有很大帮助,谢谢!

参考API- https://msdn.microsoft.com/office/office365/APi/calendar-rest-operations#CreateEvents

1 回答

  • 0

    API在技术上在这里正确运行 . UTC不会更改,但您在客户端上配置的时区可能会更改 . 在美国夏令时从3月12日开始,所以您看到约会在本地视图中“转移”,以便约会始终在UTC时间18:00开始,如您所指定:)

    所以我的猜测是你希望开始时间在DST更改中保持不变,所以你真正想要做的是在请求中指定用户的时区 . 我建议使用v2 API,其中 StartEnd 将类型更改为 DateTimeTimeZone ,允许您按名称指定TZ:

    "Start": {
      "DateTime": "2017-03-02T10:00:00",
      "TimeZone": "Pacific Standard Time"
    },
    "End": {
      "DateTime": "2017-03-02T11:00:00",
      "TimeZone": "Pacific Standard Time"
    },
    

    但是,如果您需要继续使用v1 API,那么您仍然可以使用 StartTimeZoneEndTimeZone 属性在请求中指定TZ . 您必须在此处执行的其他工作是计算 StartEnd 值中的偏移量 . 例如,对于太平洋标准时间,偏移量是UTC的 -08:00 ,因此相关位看起来像:

    "Start": "2017-03-02T10:00:00-08:00",
    "StartTimeZone": "Pacific Standard Time",
    "End": "2017-03-02T11:00:00-08:00",
    "EndTimeZone": "Pacific Standard Time",
    

相关问题