过滤器对象时的DateTime精度问题

时间:2016-10-25 08:01:32

标签: office365 office365api microsoft-graph

我使用msgraph-sdk-javascript版本0.1.2作为示例应用程序 - 我正在使用此URL通过修改日期排序的MS Graph API读取联系人列表:

https://graph.microsoft.com/v1.0/me/contacts?$orderby=lastModifiedDateTime asc&$top=10&$filter=lastModifiedDateTime gt 2016-10-24T14:21:03Z

效果很好,但有一个问题 - 输出中lastModifiedDateTime属性的精度与查询时的精度不同。

为了在选择一长串联系人时实现正确的分页,我记得结果数组中最后一个元素的lastModifiedDateTime,这样下次我将选择lastModifiedDateTime的所有元素之后我已经看过的元素。但是,这不起作用。

例如,如果我有lastModifiedDateTime值的元素返回为2016-10-24T14:21:03Z但是如果我使用lastModifiedDateTime>2016-10-24T14:21:03Z查询所有元素,我仍然会看到与之前相同的元素,我不知道#39;看看我是否选择lastModifiedDateTime>2016-10-24T14:21:03.999Z

您知道如何获得毫秒精度lastModifiedDateTime作为输出吗?

1 个答案:

答案 0 :(得分:0)

正如您所提到的,由于精度损失而发生此行为,过滤器表达式为:

lastModifiedDateTime gt 2016-10-24T14:21:03Z

对应于下一个(包括毫秒部分):

lastModifiedDateTime gt 2016-10-24T14:21:03.000Z

关于OData DateTime格式

Contact.LastModifiedDateTime内部存储的精度高于一秒,有关详细信息,请参阅DateTimeOffset structure,其中包含DateTimeOffset.Millisecond Property

话虽如此,您可以考虑以下选项:

  • 包含$filter查询选项中的毫秒部分
  • 之前展示过
  • 将过滤器表达式修改为:$filter=lastModifiedDateTime ge 2016-10-24T14:21:04Z这是一个类似的查询,用于在lastModifiedDateTime
  • 之后包含2016-10-24T14:21:03Z的所有联系人