使用@JsonFormat注解前后端时间相差8小时(已解决)

使用@JsonFormat注解前后端时间相差8小时

在写项目时发现在实体类中使用了@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解,然后该时间存入数据库也正常,从数据库中取出也是正常,但是传给前端就出现问题,两边的时间相差了 8小时。

  • 配置文件:
url: jdbc:mysql://localhost:3306/xxx?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8

注意:gmtCreate只是数据库中习惯命名,并非使用的是GMT时间。

原始写法

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date gmtModified;
  • 程序获取到的时间:image.png
  • 数据库中存入的时间:image.png
  • 前端接收到的时间:image.png

问题剖析:

  1. 程序-数据库: 程序中获取的是当前的系统时间,取决于服务器的时间,所以获取的时间是正确的,然后传给数据库的时候,由于两边的时区没有差别,所以在序列化的时候,时间转化是没有一点问题的。
  2. 数据库-程序: 从数据库取出时间的时候进行反序列化,此时两边的时区一致,时间转换没有问题,所以程序拿到的时间也是正确的。
  3. 程序-前端: 当程序需要将对象传输给前端时,并不明确前端的时区,所以将默认对方为GMT时间,所以在序列化时,由于时区的变化,得到的Json字符串自然也发生了变化(-8小时)。

修正写法

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtCreate;
  • 程序获取到的时间:image.png
  • 数据库中存入的时间:image.png
  • 前端接收到的时间:image.png

通过在@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解中加入timezone = "GMT+8",就明确了在转为GMT时间时将时间+8再序列化。

当然,也可以直接指定时区:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date gmtCreate;

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值