一、问题描述:
数据表中生日字段类型为:datatime 在 SpringBoot 项目中查询出来发现只有年月日,时分秒丢失,并且时区时间相差8小时。
以上两种方式均可达到格式化时间格式的目的,并且完美解决时区差8小时的问题。
二、解决方案一
在实体类的生日字段上加注解。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
三、解决方案二
在 application.properties 配置文件中进行全局配置。
# 配置全局时间格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Shanghai
这里说明一下为什么用Asia/Shanghai 而不使用GMT+8;
GMT-8是东八区,北京时间和东八区一致。
Asia/Shanghai是已地区命名的地区标准时,在中国叫CST。这个地区标准时会兼容历史各个时间节点。中国1986-1991年实行夏令时,夏天和冬天差1个小时,Asia/Shanghai会兼容这个时间段。
结论:1992年以后,在中国,GMT-8和Asia/Shanghai是一样的时间,1986-1991之间,夏天会有一小时时差。