Jackson日期转换少一天

 

1. 案例前端

添加一个学生,前端把生日传给后端,后端使用Datel类型接收到后,而后调用其它服务进行保存入库。数据库

与其它服务交互时,使用的是JSON格式,出现日期少一天。json

@Data
@AllArgsConstructor
public class Student {

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

}
    @Test
    public void test1() throws Exception {
        // String 转 Date
        String date = "1990-06-01";
        Date birthday = DateUtils.parseDateStrictly(date, "yyyy-MM-dd");
        System.out.println("birthday:" + birthday);
        // 建立对象
        Student student = new Student(birthday);
        ObjectMapper mapper = new ObjectMapper();
        // 对象转JSON串
        System.out.println("student:" + mapper.writeValueAsString(student));
    }

控制台输出结果:后端

birthday:Fri Jun 01 00:00:00 CDT 1990
student:{"birthday":"1990-05-31"}app

 

2. 缘由spa

两个关键点:1.birthday输出带有CDT;二、日期是1990-06-01code

CDT: 夏令时标志(通常在天亮早的夏季人为将时间调快一小时)orm

1986年至1991年,中华人民共和国在全国范围实行了六年夏令时(具体请咨询百度)对象

 

3. 解决方案blog

1. 统一使用字符串交互,在开发中仅在Entity(与数据库表对应的)中出现Date,其它场景统一使用String -- 推荐

2.Jackson 换成 Fastjson

3. 添加JVM参数-Duser.timezone=GMT+8(网上说的,咱们项目使用k8s部署,试了没啥用) -- 不推荐

相关文章
相关标签/搜索