SpringBoot集成Spring Data JPA保存和返回时间比北京时间早8小时

朱雀 2020-10-31 18:58 1034阅读 0赞

环境

springboot: 2.1.4.RELEASE
spring-data-jpa: 2.1.6.RELEASE
mysql-connector-java: 8.0.5
mysql数据库: 5.7

mysql数据库配置

可以通过命令show variables like '%time_zone%';查看当前mysql时区配置
可以直接通过命令修改时区,set time_zone='+8:00';,但是下次重启mysql后失效,建议修改mysql配置文件my.ini
[mysqld]配置下面添加配置

  1. [mysqld]
  2. default-time-zone = '+8:00'

配置修改后,重启mysql服务,查看配置是否生效
查看mysql当前时区

问题1:保存时间比北京时间早8小时

使用save、saveAndFlush等保存数据是,如果对应的数据库字段是时间类型datetime,会出现保存到库的时间比北京时间早8小时的问题。原因在于数据库连接配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/gseem?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true

问题1解决

修改时区配置serverTimezone为 Asia/Shanghai 或者 GMT%2b即可
spring.datasource.url=jdbc:mysql://localhost:3306/gseem?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=true

问题2:返回到前端的json数据时间字段吧北京时间早8小时

默认情况下,返回的json数据时区是国际标准时区,时间比北京时间早8小时

  1. {
  2. "code": "1",
  3. "msg": "success",
  4. "data": {
  5. "id": 1,
  6. "name": "feiyue",
  7. "password": "123456",
  8. "age": 20,
  9. "sex": 2,
  10. "birthday": "2019-04-27T16:00:00.000+0000",
  11. "createTime": "2019-04-28T07:06:44.000+0000",
  12. "updateTime": "2019-04-30T09:15:32.737+0000",
  13. "status": 1
  14. }
  15. }

问题2解决

修改application.properties配置文件,添加如下配置

  1. spring.jackson.time-zone=GMT+8

添加后返回结果

  1. {
  2. "code": "1",
  3. "msg": "success",
  4. "data": {
  5. "id": 1,
  6. "name": "feiyue",
  7. "password": "123456",
  8. "age": 20,
  9. "sex": 2,
  10. "birthday": "2019-04-28T00:00:00.000+0800",
  11. "createTime": "2019-04-28T15:06:44.000+0800",
  12. "updateTime": "2019-04-30T17:18:51.080+0800",
  13. "status": 1
  14. }
  15. }

发表评论

表情:
评论列表 (有 0 条评论,1034人围观)

还没有评论,来说两句吧...

相关阅读