各位在实际生产中使用es应该会遇到查询日期时8小时误差问题
es储存的时间 2018-05-22T04:34:21.000Z
mysql存入的时间 2018-05-22 12:34:21
原因是由于es默认日期时UTC时间。
几个时间名词:
(1)GMT:格林威治标准时间
(2)UTC:世界协调时间
(3)DST:夏日节约时间
(4)CST:中国标准时间
其中GMT时间可以近似认为和UTC时间是相等的,但从精度上来说UTC时间更精确。其误差值必须保持在0.9秒以内
CST= GMT + 8 =UTC + 8
从上面可以看出来中国的时间是等于UTC时间+8小时
说下目前公司的解决方案:
刚项目时候,我司老同事就已经帮我们填这个小坑,在返回数据的字段属性上标注,基于jackson的转化
自我感觉,后期开发中疏忽会漏掉注解,而且mysql与es对于相同的数据返回,由于es的缘故就得定义不同的DTO。
遂想找更合理的解决方法,最优的方案当然就是改数据源啦
又“研究”起了架构师封装的es接口
部分代码如下:
|
改造前,仍是使用UTC时间
改造后直接转为通用格式yyyy-MM-dd HH:mm:ss的话,时间是少8小时的,将时区设为为北京时区
- 本文标题: es时间相差8小时问题
- 文章作者: sherryriver(木木三可)
- 发布时间: 2018.10.01
- 本文链接: https://sherryriver.github.io/2018/10/01/es时间相差8小时/
- 许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。