what?es数据偏移了8小时...

今天搞监控大屏的时候,测试突然提出一个问题说,查一段时间的数据,时间曲线返回的日期有时候会比查询时间多,翻看代码后,初步定位为es的时区问题,后来将时间曲线的直方图聚合增加时区后,返回数据正确。这时忽然想到写数据的时候也没有控制时区,按说es在没有时区信息的时候会默认成UTC时间,那这样,岂不是大屏的数据都往后延迟的8小时? 通过search api 按写顺序排序,发现写入的数据时间字段竟然是正确的....

为什么写数据的时候没有带时区,通过es api查询的时候正确返回了时间?

看代码:写数据的时候,将多个NoticeRecord序列化成json字符串,通过bulk api写入

NoticeRecord noticeRecord = new NoticeRecord(); 
noticeRecord.setAlarmTime(new Date()); System.out.println(JSONObject.toJSONString(noticeRecord));

输出:

{"alarmTime":1696834237286,"openMonitor":false}

原来 fastjson在序列化日期字段时也会将其弄成时间戳,也就是东八区的时间戳,所有直接查询返回的时间是没有问题的

终于解决了疑问,顺道将es时间类型数据时区知识点梳理了一遍:

what?es数据偏移了8小时..._第1张图片

es时区问题汇总:

what?es数据偏移了8小时..._第2张图片

参考

Elasticsearch中的date与时区问题_es设置时区-CSDN博客

Elasticsearch-日期数据类型和时区详解_elasticsearch 日期类型-CSDN博客

你可能感兴趣的:(elasticsearch)