【问题描述】:

我正在聚合每个都有时间戳的文档。时间戳是 UTC,但每个文档也有一个本地时区 ("timezone": "America/Los_Angeles"),该时区可能因文档而异。

我正在尝试根据本地时间进行 date_histogram 聚合,而不是 UTC 或固定时区(例如,使用选项 "time_zone": "America/Los_Angeles"< /代码>)。

如何在聚合前将每个文档的时区转换为其当地时间?

这是简单的聚合:

{
  "aggs": {
    "date": {
      "date_histogram": {
        "field": "created_timestamp",
        "interval": "day"
      }
    }
  }
}

【问题讨论】:

  • 您有没有为此找到解决方案?我知道这是旧的,但我处于完全相同的位置,并认为我会在发布其他重复问题之前进行检查。

标签: elasticsearch timezone elasticsearch-aggregation date-histogram


【解答1】:

我不确定我是否完全理解它,但似乎time_zone property 就是为此:

<1234565>

区域值接受小时偏移的数值,例如:“time_zone”:-2。它还接受小时和分钟的格式,例如“time_zone”:“-02:30”。另一种选择是提供一个被接受为此处列出的值之一的时区。

【问题讨论】:

    【解答2】:

    如果您存储另一个没有时区信息的本地时间字段,它应该可以工作。

    获取您拥有的每个时间戳(以 UTC 为单位),将其转换为本地时区的日期(这将包含时区信息)。现在只需从此日期时间删除时区信息。现在您可以对这个新字段执行操作了。

    假设您从 UTC 时间开始: '2016-07-17T01:33:52.412Z'

    现在,假设您在 PDT 中,您可以将其转换为: '2016-07-16T18:33:52.412-07:00'

    现在,砍掉最后,你会得到: '2016-07-16T18:33:52.412Z'

    现在你可以对这个字段进行操作了。

    【问题讨论】: