Elasticsearch+kibana date索引 东八区问题

问题

在es + kibana环境下,使用java8的时间类型LocalDateTime对应es中date类型的索引,发现在kibana中显示的时间比正常时间晚8小时,比如LocalDateTime为2018-07-18T10:00:00.000,但是kibana中显示的时间是2018-07-18T18:00:00.000,两者相差8小时。

说明

es官方文档说明,es内部会将没有标明时区的时间全部当做UTC时间,所以入参的LocalDateTime(2018-07-18T10:00:00.000)内部没有时区信息,es转化为UTC时间2018-07-18T10:00:00.000+00:00。而kibana根据浏览器所在地区确定时间,所以kibana内部显示东八区时间,所以显示的是2018-07-18T18:00:00.000+08:00

解决

使用带时区的时间类型ZonedDateTime取代LocalDateTime,并且设置jackson转换格式

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
            locale = "zh", timezone = "GMT+8")
    private ZonedDateTime insertTime;

同时修改mapping

"insertTime": {
        "type": "date",
        "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
      }

es和kibana都会使用指定的东八区时间
注意:使用jackson序列化java.time包下面的时间类型时,需要添加Module

objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());

你可能感兴趣的:(Elasticsearch+kibana date索引 东八区问题)