概述
时间相关的字段是ElasticsSearch(以下简称ES)最常用的字段了,几乎所有的索引应用场景都会有时间字段,一般用于基于时间范围的搜索,聚合等场景。但是由于时区的问题,相信很多小伙伴都踩到过时间字段的坑,笔者自己就踩过。
本文希望给你提供一个避坑指南。
了解时区的基本概念
因为本文不是专门讲时区的,你只需要了解一些基本的概念就可以了。
我们知道全球分为24个时区,包含23个整时区及180°经线左右两侧的2个半时区。东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时。比如北京位于东8区,所以北京时间应该是晚上8点。
格林威治标准时间GMT或者UTC
GMT和UTC可以认为是一个东西,只是精度的差异。他们代表的是全球的一个时间参考点,全球都以格林威治的时间作为标准来设定时间。
在程序中我们经常能见到这样的字符串:
Thu Oct 16 07:13:48 GMT 2019
这说明这个时间是GMT时间。
CST中国标准时间
China Standard Time,是中国的标准时间。CST = GMT(UTC) + 8。比如
Thu Aug 25 17:15:49 CST 2019
表示的就是CST时间。有时候我们也能见到类似下面这样的表示:
2020-03-15T11:45:43Z
其中Z表示的就是UTC时间。
坑一,日期字段映射问题
我们知道ES有个Dynamic Mapping的机制,当索引