我想要实现的目标
我想在用户的日历中获取所有事件,有时在两个时间点之间的特定窗口内,有时只是全部.这些事件必须在事件开始时立即订购.
我面临的问题
我在使用OData v4 $过滤器和$orderby查询参数进行过滤和按事件的开始和结束排序时遇到了一些问题.问题是,从API的v2.0开始,这些属性是由DateTime和TimeZone组成的对象,并且在按DateTime过滤/排序时应考虑TimeZone.
此片段取自官方文档:
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI28tEyDAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAA/LpDWw==\"",
"Id": "AAMkAGI28tEyDAAA=",
"Subject": "Scrum",
"Start": {
"DateTime": "2015-11-02T17:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2015-11-02T17:30:00",
"TimeZone": "Pacific Standard Time"
},
...
}
我可以过滤Start / DateTime和End / DateTime,但不考虑时区偏移.按Start / DateTime排序也是如此:
https://outlook.office365.com/api/v2.0/users/user@example.org/events/?$filter=End/DateTime%20gt%202016-12-11T00:00:00&$orderby=Start/DateTime
试图通过Start命令导致错误,这告诉我无法对非原始属性进行排序.
我在响应中收到的时区似乎都是UTC,无论我在创建事件时指定哪个时区.但是,文档显示’Pacific Stardard Time’,所以我可能不能假设所有事件总是转换为UTC.
为什么v1.0 API中不存在此问题
在API的v1.0中,Start和End仍然是(原始)datetimeoffset,而StartTimeZone和EndTimeZone是单独的属性,所以到那时问题就不存在了.开始和结束包含一个偏移量,因此我可以过滤这些属性并按顺序排序,同时忽略StartTimeZone和EndTimeZone属性.
使用/ calendarview代替/ events
我知道/ calendarview端点的存在,它允许我指定一个窗口来检索事件.但是,使用此端点还意味着我收到事件的所有事件(我不感兴趣),而不是单个事件和系列主事件.这就是为什么我更喜欢使用常规/事件端点的原因之一.
最佳答案 您可以传递首选时区标题,以获得所需时区的响应
首选:outlook.timezone =“东部标准时间”