我正在使用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 回答
API在技术上在这里正确运行 . UTC不会更改,但您在客户端上配置的时区可能会更改 . 在美国夏令时从3月12日开始,所以您看到约会在本地视图中“转移”,以便约会始终在UTC时间18:00开始,如您所指定:)
所以我的猜测是你希望开始时间在DST更改中保持不变,所以你真正想要做的是在请求中指定用户的时区 . 我建议使用v2 API,其中
Start
和End
将类型更改为DateTimeTimeZone
,允许您按名称指定TZ:但是,如果您需要继续使用v1 API,那么您仍然可以使用
StartTimeZone
和EndTimeZone
属性在请求中指定TZ . 您必须在此处执行的其他工作是计算Start
和End
值中的偏移量 . 例如,对于太平洋标准时间,偏移量是UTC的-08:00
,因此相关位看起来像: