在NEST DateRange谓词中使用DateTimeOffset

时间:2017-12-28 13:55:31

标签: c# .net elasticsearch nest

我有一个简单的NEST查询与DateRanges谓词:

DateTimeOffset dt;
...
.DateRange(r => r
    .Field("Time")
    .LessThanOrEquals(dt)

根据this question,仅将DateTimeOffset转换为DateTime 可能会导致数据丢失LessThanOrEquals和其他谓词方法接受Nest.DateMath类型的对象,该对象具有以下运算符:

public static implicit operator DateMath(DateTime dateTime);
public static implicit operator DateMath(string dateMath);

此外,DateRangeQueryDescriptor还有一个方法:

public DateRangeQueryDescriptor<T> TimeZone(string timeZone);

但我不确定如何使用它。

问题

如何在DateTimeOffset中使用DateRange对象作为NEST谓词的值,并确保发送给Elastic的日期是正确的?

1 个答案:

答案 0 :(得分:1)

显然,我错了。

根据thisthis,所有日期都存储或必须存储为UTC,因此范围参数也应作为UTC传递。

  

在内部,日期转换为UTC(如果指定了时区)并存储为一个长数字,表示自此纪元以来的毫秒数。