我要实现的目标
我想在用户日历中获得所有事件,有时在两个瞬间之间的特定窗口中,有时只是全部。这些事件必须在活动开始时订购。
我面临的问题
我使用ODATA V4 $filter
和$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,无论我在创建事件时指定哪个时区。但是,文档显示"太平洋星德时间",所以我可能不能认为所有事件总是转换为UTC。
为什么V1.0 API
中不存在此问题在API,Start
和End
的V1.0中仍然是(原始)datetimeoffset
,而StartTimeZone
和EndTimeZone
是单独的属性,因此到那时不存在问题。Start
和End
包含一个偏移,因此我可以通过它们过滤这些属性和顺序,而忽略StartTimeZone
和EndTimeZone
属性。
使用/calendarview代替/事件
我知道/calendarview
端点的存在,这使我可以指定一个窗口以检索事件的窗口。但是,使用此端点还意味着我收到了事件的所有事件(我不感兴趣),而不是单个事件和系列大师。这就是为什么我更喜欢使用常规/events
端点的原因之一。
您可以通过优先时区标头来获取所需时区的响应
Prefer: outlook.timezone="Eastern Standard Time"