Microsoft图 |使用"GT"过滤器获取消息充当"GE"



我正在Microsoft Graph查询用户收件箱中的新邮件(电子邮件(。 我只想收到"新"消息,所以我使用 gt 过滤器,传递我处理的最后一条消息的时间。 我正在接近的网址是:https://graph.microsoft.com/v1.0/Users/{my-user-id}/messages?$filter=receivedDateTime gt 2019-12-15T23:49:06Z

我得到的响应是一条消息,其receivedDateTime与我在查询中使用的消息相同(带有gt( 以下是我从 Graph 获得的 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 允许您指定要在返回的日期时间中看到的精度,可能有一个图形首选标头(或应该是(,但我还没有找到它(。因此,由于其精度,此项目大于查询日期,这在技术上很可能是正确的。如果您想查看邮件的实际精度,您可以使用 MAPI 编辑器,如 MFCMapi 的 OutlookSpy。然后,您可以查看PT_Systime值,即文件时间"8 字节;一个 64 位整数,表示自 1601 年 1 月 1 日以来的 100 纳秒间隔数"请参阅 http://msdn.microsoft.com/en-us/library/ee157583(v=EXCHG.80(.aspx

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

最新更新