Office365 O365 Calendar REST API v2.0中的OData参数应如何处理开始和结束时区? 我想要达到的目标

Office365 O365 Calendar REST API v2.0中的OData参数应如何处理开始和结束时区? 我想要达到的目标,office365,office365api,outlook-restapi,office365-restapi,Office365,Office365api,Outlook Restapi,Office365 Restapi,我想获取用户日历中的所有事件,有时是在两个瞬间之间的特定窗口内,有时只是全部。这些事件必须在事件开始时作为即时事件进行排序 我面临的问题 我在使用OData v4$filter和$orderby查询参数按事件的开始和结束进行筛选和排序时遇到一些问题。问题在于,从API的v2.0开始,这些属性是由日期时间和时区组成的对象,在按日期时间进行过滤/排序时,应考虑时区 此片段摘自官方文件: { "@odata.id": "https://outlook.office.com/api/beta/U

我想获取用户日历中的所有事件,有时是在两个瞬间之间的特定窗口内,有时只是全部。这些事件必须在事件开始时作为即时事件进行排序

我面临的问题 我在使用OData v4
$filter
$orderby
查询参数按事件的开始和结束进行筛选和排序时遇到一些问题。问题在于,从API的v2.0开始,这些属性是由
日期时间
时区
组成的对象,在按
日期时间
进行过滤/排序时,应考虑
时区

此片段摘自官方文件:

{
    "@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
,但是不考虑时区偏移。按
开始/日期时间
排序也一样:

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的v1.0中,
Start
End
仍然是(原语)
datetimeoffset
,而
StartTimeZone
EndTimeZone
是单独的属性,所以到那时问题就不存在了
Start
End
包含一个偏移量,因此我可以在忽略
StartTimeZone
EndTimeZone
属性的同时对这些属性进行筛选和排序

使用/calendarview而不是/events
我知道存在
/calendarview
端点,它允许我指定一个窗口来检索事件。然而,使用这个端点也意味着我接收所有事件的发生(我不感兴趣),而不是单个事件和系列主控。这就是为什么我喜欢使用常规的
/events
端点的原因之一。

您可以传递首选时区标头以获得所需时区中的响应


首选:outlook.timezone=“Eastern Standard Time”

筛选的日期时间周围有两个符号,而不是%27(单引号)。检查文档时,应该是这样的:/api/v2.0/users/user@example.org/events/?$filter=End/DateTime%20gt%20%272016-12-11T00:00:00%27&$orderby=Start/DateTime第一个符号是一个拼写错误,所以我现在删除了它,谢谢。第二个表示下一个查询参数,因此它需要在那里。文档显示时间戳周围不应该有引号:。感谢您的更正,但以下是文档中的示例,api/v2.0/me/events?$filter=Start/DateTime%20ge%20%272016-04-01T08:00%27.%27是单个引号。但是我看到很多没有的例子,所以我假设你是正确的嗯,这听起来很愚蠢,但是你能试试$orderby=Start\DateTime吗?(请注意,正斜杠现在是反斜杠)更清楚地说,我的问题不是过滤
Start/DateTime
不起作用,而是没有考虑时区,因为每个事件都可以有不同的
Start/timezone
。如果没有时区,DateTime就没有真正的意义。非常感谢您的回答!遗憾的是,官方API文档中没有记录此功能。这就是为什么我没有早点找到它。但是,此Microsoft博客中记录了以下内容: