@JsonFormat(pattern=“yyyy-MM-dd“)时间差问题

3,203 阅读2分钟

​这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

最近在做给一个同学做课程设计项目的时候,需要Java后端给前端页面返回时间、比如考试时间这种、前端用的vue+element时间选择器、(要用本地时间--北京时间),后端时间字段映射,转换,但数据传到后台就会比北京时间少8个小时。具体检查了下是因为时区的问题。但前端显示还是少8个小时,这样的话那肯定还是有问题的。可以利用@JsonFormat绑定到对象属性上解决问题。

原因:@JsonFormat(pattern="yyyy-MM-dd")时间差问题

解释:默认情况下timeZone为GMT(即标准时区),而北京是在东八区,所以会造成差8小时。

解决方法:加上timezone = "GMT+8

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

2 也可以在Springboot application.yml中修改MySQL配置

druid:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/renren_students?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

扩展知识:

注解@JsonFormat的使用

在项目maven引入@JsonFormat所需要的jar包。主要如下

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.8.8</version>
</dependency>

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.8.8</version>
</dependency>

<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.9.13</version>
</dependency>

@JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不是yyyy-MM-dd HH:mm:ss这样的中文时间,因此我们需要用到JsonFormat注解来格式化我们的时间。一般用于一个字段命名上面在对应的查询数据库对象字段对应的实体类的属性上添加@JsonFormat属性。//设置时区为上海时区,时间格式自己据需求定。比如:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")。

​ 大家点赞、收藏、关注、评论啦 、 打卡 文章 更新 106/  365天