一. 时区说明
每一个国家对应的时间都是不同的,也就是具有时差,他们都是以标准时间为基准,然后再此上加上时区的概念,从而统一整个世界的时间。
原来标准时间是以格林尼治标准时间(GMT,旧译“格林威治平均时间”或“格林威治标准时间”)为基准,也就是GMT,现在是以UTC为基准,也就是国际协调时间, 协调世界时,又称世界统一时间,世界标准时间,国际协调时间。
可以理解GMT就是等于UTC,GMT是UTC民间的叫法。
二、jackson时区介绍(减去一天的问题)
jackson是springmvc自带的一种序列化工具,当前端请求controller层,那么返回的json对象都是需要jackson进行序列化,那么就涉及到日期到格式的序列,如果是date格式的话,jackson会对日期格式进行时区转换,如果date值是 2022-02-04 , jackson默认的时区是0时区也就是会相对中国-8个小时,也就是将 2022-02-04 会减去8个小时,从而返回给前端的值是 2022-02-03,从而导致减去一天。
- 在返回实体对象中使用@JsonFormat( timezone = “GMT+8”)指定时区
- 配置 jackson: time-zone: GMT+8 默认全部是以GMT+8进行转换。
三、datetime \ timestamp 介绍
timestamp存储的时间与时区有关,变换时区数据会受影响;datetime与时间无关, 所以工作中要尽量用datetime。如果要做时区的转换,可以将对应的时区数据转成格林尼治时间日期存入到数据库,再以其他的时区进行转换。