springboot修改时区问题

1.mysql数据库时区问题

通过如下命令可以查询MySQL的时区

 show variables like "%time_zone%";


如果未做任何修改会显示如下:

+------------------+--------+
| Variable_name  | Value |
+------------------+--------+
| system_time_zone | CST  |
| time_zone    | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)


#time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区
1.2、系统时区意味着与计算机的操作系统时区相同。
以下是我们北京时间使用MySQL时区

 set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
> set time_zone = '+8:00'; ##修改当前会话时区
> flush privileges; #立即生效


或者通过修改MySQL的 my.cnf配置文件来修改时区
# vim /etc/my.cnf ##在[mysqld]区域中加上
default-time_zone = '+8:00'
# /etc/init.d/mysqld restart ##重启mysql使新时区生效

1.3、jdbc连接数据库

 url: jdbc:log4jdbc:mysql://127.0.0.1:3306/enric?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT%2B8
    

serverTimezone=GMT%2B8

2. springboot默认采用jackson解析返给前端页面的json数据

日期类型的字段上的 @JsonFormat 加上属性 timezone="GMT+8"

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date startTime;

2.2、只需要配置一个bean实现整体修改

@Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
        return jacksonObjectMapperBuilder ->
                jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("GMT+8"));
    }

2.3、使用SpringBoot的配置方式
 

spring.jackson.default-property-inclusion=NON_NULL
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

注:如果修改jackson不生效,检查项目中使用@EnableWebMvc的地方 去掉即可

你可能感兴趣的:(java,spring,boot,mysql,后端)