我当前正在使用Office Graph API来处理用户日历会议。 如果使用“ / subscriptions”请求创建,更新和删除了事件,我已订阅接收通知! 我的用户使用的是里斯本时区(夏季= UTC + 1,冬季= UTC)
当用户在Office 365中创建事件时,在我的应用程序一侧,如果该事件是没有结束日期的递归会议,我将通过Graph API更新该会议,使其具有结束日期。 [注意:我的申请规则之一是,会议不得超过365天。]
问题:该系列缩小到我通过API更新的结束日期,但是时间留有错误的时区。我已经尝试请求不带时区的API,并且已经请求使用时区UTC和时区UTC +1进行更新,但我始终遇到相同的问题。在办公室,更新后,会议时间减少了一个小时。
以下图像是系列的一个示例,没有结束范围:
我在更新之前获取了一些子会议,这是正确的。在葡萄牙,时间更改日期为2019-03-30,因此第30天开始于世界标准时间10h00,第31天开始于09:00 UTC:
在这里,我将请求发送到Office 365以更新重复结束(结束日期):
发送更新请求后,我获取了相同的子代,并且2019-03-30和2019-03-31的日期都从10h00开始。 在客户日历中进行此更新之后,会议的开始和结束时间有误:
我已经尝试过在Graph API recurrenctTImeZone(UTC,格林尼治标准时间)中输入Graph API,并且根本不输入任何内容,而且我总是得到相同的回报。我不能解决这个问题。
您知道什么地方可能出问题吗?
答案 0 :(得分:2)
经过几次尝试解决后,我能够与Office 365开发团队进行交谈,并对负面反馈感到惊讶。
他们表示,在这种特定情况下,实际上Microsoft API图表中存在一个未知错误,并且他们不保证可以解决此错误!
他们的建议是,仅在这种情况下使用Outlook Calendar API Rest API。 总之,由于Microsoft已经承担了这个未知错误,因此我必须在平台中实现2种不同的API:Microsoft当前推荐的Microsoft Graph API和由于此bug而导致的Outlook Calendar Rest API。
Outlook Calendar API Rest解决方案:
答案 1 :(得分:0)
您实际上可以在请求的标题中使用它
Prefer: outlook.timezone="Central Standard Time"
这样,它就可以知道要在哪个时区中进行计算。 https://docs.microsoft.com/en-us/graph/api/user-list-events?view=graph-rest-1.0#support-various-time-zones
上提供了有关此文档的更多文档答案 2 :(得分:0)
我不会在太平洋标准时间时区或GMT标准时间时区中与用户重现此行为。为了清楚起见,我使用Postman进行了所有测试,并且未使用Jeremy指出的Prefer: outlook.timezone
标头。
我在太平洋标准时间2PM(即世界标准时间22:00)为用户创建了每日无休止约会。还要注意,DST在3月10日的这个时区开始。如下所示,更新前后实例上的时间都是正确的。
我还在GMT标准时间时区(在网络上的Outlook中如此配置)中为用户重复了相同的事件序列:
我为此用户获得了完全相同的结果。
我建议在修补重复周期时,请始终使用原始重复周期中的recurrenceTimeZone
。最初通过使用UTC
进行修补,您可能破坏了重复性。
在Web上的Outlook中创建事件后获取事件
GET /me/events/{id}&$select=originalStartTimeZone,originalEndTimeZone,start,end,recurrence
{
"id": "AAMkAGE1NWM...",
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"start": {
"dateTime": "2019-01-24T22:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-01-24T22:30:00.0000000",
"timeZone": "UTC"
},
"recurrence": {
"pattern": {
"type": "daily",
"interval": 1,
"month": 0,
"dayOfMonth": 0,
"firstDayOfWeek": "sunday",
"index": "first"
},
"range": {
"type": "noEnd",
"startDate": "2019-01-24",
"endDate": "0001-01-01",
"recurrenceTimeZone": "Pacific Standard Time",
"numberOfOccurrences": 0
}
}
}
在修改之前获取实例
请注意开始/结束时间的变化。
GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
$select=originalStartTimeZone,originalEndTimeZone,start,end
{
"value": [
{
"id": "AAMkAGE1NWM...",
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"start": {
"dateTime": "2019-03-09T22:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-03-09T22:30:00.0000000",
"timeZone": "UTC"
}
},
{
"@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
"id": "AAMkAGE1NWM...",
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"start": {
"dateTime": "2019-03-10T21:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-03-10T21:30:00.0000000",
"timeZone": "UTC"
}
}
]
}
更新事件重复以添加结束日期
请注意,我将recurrenceTimeZone
保留为与原始值相同的值。
PATCH /me/events/{id}
{
"recurrence": {
"pattern": {
"type": "daily",
"interval": 1,
"month": 0,
"dayOfMonth": 0,
"firstDayOfWeek": "sunday",
"index": "first"
},
"range": {
"type": "endDate",
"startDate": "2019-01-24",
"endDate": "2020-01-23",
"recurrenceTimeZone": "Pacific Standard Time",
"numberOfOccurrences": 0
}
}
}
修改后获取实例
请注意,开始/结束时间仍正确偏移。
GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
$select=originalStartTimeZone,originalEndTimeZone,start,end
{
"value": [
{
"id": "AAMkAGE1NWM...",
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"start": {
"dateTime": "2019-03-09T22:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-03-09T22:30:00.0000000",
"timeZone": "UTC"
}
},
{
"@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
"id": "AAMkAGE1NWM...",
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"start": {
"dateTime": "2019-03-10T21:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2019-03-10T21:30:00.0000000",
"timeZone": "UTC"
}
}
]
}