Microsoft graph api Microsoft Graph |使用'获取消息;gt';过滤器充当';通用电气';

Microsoft graph api Microsoft Graph |使用'获取消息;gt';过滤器充当';通用电气';,microsoft-graph-api,Microsoft Graph Api,我正在Microsoft Graph中查询用户收件箱中的新邮件(电子邮件)。 我只想获取“新”消息,所以我使用gt过滤器,将我上次处理消息的时间传递给它。 我要访问的url是: https://graph.microsoft.com/v1.0/Users/{my user id}/messages?$filter=receivedDateTime gt 2019-12-15T23:49:06Z 我得到的响应是一条消息,其receivedDateTime与我在查询中使用的消息相同(带有gt) 下面

我正在Microsoft Graph中查询用户收件箱中的新邮件(电子邮件)。 我只想获取“新”消息,所以我使用gt过滤器,将我上次处理消息的时间传递给它。 我要访问的url是:
https://graph.microsoft.com/v1.0/Users/{my user id}/messages?$filter=receivedDateTime gt 2019-12-15T23:49:06Z

我得到的响应是一条消息,其
receivedDateTime
与我在查询中使用的消息相同(带有
gt
) 下面是我从图中得到的json响应的相关部分:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('my-user-id')/messages",
    "value": [
        {
            "@odata.etag": "W/\"etag-replaced\"",
            "id": "message-id-replaced",
            "createdDateTime": "2019-12-15T23:49:05Z",
            "lastModifiedDateTime": "2019-12-15T23:49:06Z",
            "changeKey": "change-key-replaced",
            "categories": [],
            "receivedDateTime": "2019-12-15T23:49:06Z",   // that's the weird part.
            "sentDateTime": "2019-12-15T23:49:06Z",
            "hasAttachments": false,.....

因此,似乎
gt
(大于)的行为就好像它是
ge
(大于或等于)一样,这可能是一个错误吗?

底层Exchange服务器以毫秒以下的精度存储该项(EWS允许您指定希望在返回的datetime中看到的精度,可能有一个Graph Preference标头(或者应该是),但我还没有找到它)。因此,从技术上讲,由于其精度,此项很可能大于查询日期。如果要查看邮件的实际精度,可以使用MAPI编辑器,如MFCMapi的OutlookSpy。然后,您可以查看PT_Systime值,即FileTime“8字节;表示自1601年1月1日起100纳秒间隔数的64位整数”请参见

解决方法只是在客户端对其进行过滤,或者在实际查询中包含毫秒(我同意这是一个可用性缺陷,因为99%的人会在查询中使用秒)