office365 – 如何在O365 Calendar REST API v2.0中的OData参数中处理开始和结束时区?

我想要实现的目标

我想在用户的日历中获取所有事件,有时在两个时间点之间的特定窗口内,有时只是全部.这些事件必须在事件开始时立即订购.

我面临的问题

我在使用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 =“东部标准时间”

点赞