elasticsearch,timezone,kibana,timezone-offset,Datetime,elasticsearch,Timezone,Kibana,Timezone Offset" /> elasticsearch,timezone,kibana,timezone-offset,Datetime,elasticsearch,Timezone,Kibana,Timezone Offset" />

Elasticsearch中的datetime-如何处理时区

Elasticsearch中的datetime-如何处理时区,datetime,elasticsearch,timezone,kibana,timezone-offset,Datetime,elasticsearch,Timezone,Kibana,Timezone Offset,我尝试为包含日期的字段编制索引 如何为不同时区的日期编制索引 我已将elasticsearch字段设置为: '请求的日期':{“类型”:“日期”,“格式”:“日期时间号”} 'local_dt':{“type”:“date”,“format”:“date\u time\u no\u millis”} 我尝试为这些值编制索引(local_dt): (请求的时间是法国的当前时间) 我没有通过Kibana获得预期的结果: [local_dt] IT October 28th 2016, 01:46:1

我尝试为包含日期的字段编制索引

如何为不同时区的日期编制索引

我已将elasticsearch字段设置为: '请求的日期':{“类型”:“日期”,“格式”:“日期时间号”} 'local_dt':{“type”:“date”,“format”:“date\u time\u no\u millis”}

我尝试为这些值编制索引(local_dt): (请求的时间是法国的当前时间)

我没有通过Kibana获得预期的结果:

[local_dt]
IT October 28th 2016, 01:46:17.000
GB October 28th 2016, 00:46:19.000

[requested_dt]
IT October 27th 2016, 23:46:17.000
GB October 27th 2016, 23:46:19.000
因此,对于请求的_dt,我得到了我所期望的

对于本地人来说,我没有得到我想要的

我尝试用UTC偏移量替换Z值,但无法获得正确的输出

是否有人能向我解释如何获得我想要的每个时区的正确输出

根据我的阅读(以及我自己的经验),Kibana将为
@时间戳编制索引,假设它们是UTC,格式,并且只有
2018-04-23T10:45:13.899Z
。请注意,我们只有毫秒和
T
作为分隔符,而
Z
表示UTC

因此,如果您有一个本地
datetime
对象,请尝试将其转换为UTC时间,并按上面的方式格式化

  • 如果是
    now()
    ,请使用
    django.utils.timezone的
    timezone.now()
    ;或者,如果没有django,您将拥有
    datetime.datetime.utcnow()
  • 如果您已有
    datetime()
    对象,则可以执行以下操作:
这:

(感谢)

当您拥有对象时,格式如下:

timeStr = datetime.strftime(your_utc_time_object, "%Y-%m-%dT%H:%M:%S.%f") # %f: microseconds, 1/10^6 seconds.
timeStr = timeStr[:-3] # delete the trailing 3 digits, convert to milliseconds
toInsert["@timestamp"] = nowStr + "Z" # add 'Z' at last

对于像我这样通过谷歌搜索来到这里的人来说,你不能在时间戳的末尾附加一个字母并让Elasticsearch识别它

我认为情况会是这样,因为它识别并输出UTC时间戳末尾的“Z”,所以我在自己的时间戳上附加了“R”,表示它们来自UTC-5。下面是它们相邻时的样子:

"2020-04-09T07:35:15.100Z"  # parsed as UTC
"2020-04-09T07:35:15.100R"  # illegal argument exception
然而,没有一种内置格式能够识别这个额外的字母;必须这样指定时间偏移

"2020-04-09T07:35:15.100-0500"
"2020-04-09T07:35:15.100-05:00"
或者在管道处理器中指定时区

{
  "pipeline": {
    "processors": [
      {
        "date": {
          "field": "raw_date",
          "formats": ["ISO8601"],
          "timezone": "America/New_York"
        }
      }]
  }
}

您在
logstash
中尝试了日期过滤器?我没有使用logstash;只是尝试使用python发送值
"2020-04-09T07:35:15.100-0500"
"2020-04-09T07:35:15.100-05:00"
{
  "pipeline": {
    "processors": [
      {
        "date": {
          "field": "raw_date",
          "formats": ["ISO8601"],
          "timezone": "America/New_York"
        }
      }]
  }
}