Odata V4 DateTimeOffset 过滤器问题

Issue with Odata V4 DateTimeOffset filter

我正在尝试按 NULL 或大于当前日期的值过滤 OData 调用中的日期字段。我已经尝试了所有我能在互联网上找到的不同的东西,在 SO 上。到目前为止没有任何效果。它似乎可以与日间屏障一起使用,因此不会显示昨天过期的内容,但会显示明天过期的内容。但是,如果我的过期时间在当前时间的一个小时内,那么这两个结果似乎都不会显示。例如:现在是08:58。如果一项在 08:00 过期,一项在 09:00 过期,两者都不会显示在我的结果中。

我查看了时区信息,返回的结果与我为过滤器设置的时区相同。

过滤日期的字符串模板:

ExpirationDate eq null or ExpirationDate gt cast({0}, Edm.DateTimeOffset)) and Variations/any()

填写代码:

    var utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
    var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss");
    var utcInfo1 = (utcOffset < TimeSpan.Zero) ? "-" : "+";
    var utcInfo2 = utcOffset.ToString(@"hh\:mm");
    _filterBuilder.Append(String.Format(_filterCORE, timeStamp + utcInfo1 + utcInfo2));

上面的代码是我尝试的原始字符串,我没有做任何更改来尝试调整它并使其正常工作。我很确定 UtcNow 不是用于此查询的正确时间值,但我可能是错的。代码是 C#。

更新: 数据库值存储为 smalldatetime。 Does/should 这对比较两个日期的能力有影响吗?

我需要对此过滤器做什么才能在项目设置为过期后的一小时、几分钟或几秒内获得结果?

我今天看到你的问题。要向 OData URI 添加过滤器,请添加 $filter=field_name gt 2018-02-22T00:00:00Z

不要将值括在单引号中。我在这里发现:http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html - 在文档中搜索 5.1.1.11.1 Primitive Literals