在NEST DateRange谓词中使用DateTimeOffset

问题描述 投票:0回答:1

我有一个简单的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的日期是正确的?

c# .net elasticsearch nest
1个回答
1
投票

显然,我错了。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.