最近在通过 elastic search 做访客数据的统计。
发现访客的数据不准备,明明是 今天访问的数据怎么记录到昨天了。
后来发现是因为 Elasticsearch 默认为UTC时间,即零时区,查询时若不指定时区,则默认以0时区查询,和我们所在的东八区差8小时。yyyy-MM-dd'T'HH:mm:ss.SSSZ,这里的Z就代表UTC时区。
utc 时间
https://time.is/zh/UTC
与各地的时差
所以当存入时间后,es 默认转成 utc 时间 就少了 8小时。
最后解决办法是
通过注解方式 加了8小时的时差
@Field(type = FieldType.Date,
format = DateFormat.custom,
pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime;
这样查询和保存的数据都对了。
image.png
网友评论