【问题标题】:Use DateTimeOffset in NEST DateRange predicate在 NEST DateRange 谓词中使用 DateTimeOffset
【发布时间】:2017-12-31 15:10:00
【问题描述】:

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

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 对象作为NESTDateRange 谓词的值,并确保发送到Elastic 的日期是正确的?

【问题讨论】:

  • 根据您提到的参考帖子,您可以将转换后的DateTimeOffset(转换为TimeZone)一起使用吗?我会问额外的挑战,为什么你首先有DateTimeOffset
  • 可能是。我想确保我没有在这里犯愚蠢的错误。在提到的问题中,您可以找到一个原因为什么更喜欢DateTimeOffset 而不是DateTime - 在我们的例子中这是必要的。这是将TimeSpan 转换为TimeZone 字符串的方法。 stackoverflow.com/a/14420648/1151392

标签: c# .net elasticsearch nest


【解决方案1】:

显然我错了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多