O365日历REST API v2.0中的ODATA参数应如何开始和结束时区



我要实现的目标

我想在用户日历中获得所有事件,有时在两个瞬间之间的特定窗口中,有时只是全部。这些事件必须在活动开始时订购。

我面临的问题

我使用ODATA V4 $filter$orderby查询参数来过滤和订购事件的开始和结束时遇到了一些问题。问题在于,由于API的v2.0,这些属性是由DateTimeTimeZone组成的对象,并且在通过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/DateTimeEnd/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,StartEnd的V1.0中仍然是(原始)datetimeoffset,而StartTimeZoneEndTimeZone是单独的属性,因此到那时不存在问题。StartEnd包含一个偏移,因此我可以通过它们过滤这些属性和顺序,而忽略StartTimeZoneEndTimeZone属性。

使用/calendarview代替/事件

我知道/calendarview端点的存在,这使我可以指定一个窗口以检索事件的窗口。但是,使用此端点还意味着我收到了事件的所有事件(我不感兴趣),而不是单个事件和系列大师。这就是为什么我更喜欢使用常规/events端点的原因之一。

您可以通过优先时区标头来获取所需时区的响应

Prefer: outlook.timezone="Eastern Standard Time"

最新更新