美文网首页
服务端传到客户端后,时间字段值天数减少1

服务端传到客户端后,时间字段值天数减少1

作者: 静海潜蛟 | 来源:发表于2018-08-05 23:57 被阅读65次

项目中遇到一个问题,一个格式为dd/MM/yyyy的时间传到前端后,日期中的day总比数据库中保存的天数少一天,即‘10/08/2018’传过去变成了'09/08/2018',本地(北京)怎么测都没问题,但到线上(奥克兰)后,对于添加的日期,天数总要比添加值少一天。
后来想到可能是因为时差的问题,就把系统的时区改为奥克兰的,结果问题100%复现!!!
网上搜了一下,有说使用@JsonFormat(pattern="dd/MM/yyyy", timezone="GMT+12")注解去标注相应的日期字段,然后在前端(vue.js项目)使用element-ui展示时,对日期选择框el-date-picker设置value-format属性(数据回传的日期格式),同时format属性设置页面显示的日期格式。

    @JsonFormat(pattern="dd/MM/yyyy", timezone="GMT+12")
    private Date checkOutDate;

这样试了一下,有效果,但因为每个日期字段使用方式不一样,导致其他的字段显示不出来,后来看到一篇文章 Java 日期 解析减少一天问题。神奇,按照里面的方法,即对PO类中时间字段的get方法里,添加一句代码:

    private Date checkOutDate;

    public Date getCheckOutDate() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+12"));
        return checkOutDate;
    }

使用这种方法,可以完美解决这个问题!

原因:

时差问题(夏令时)

timestampdatetime区别:

timeType Storage format timezoneTransfer
timestamp 4 byte UTC格式保存 存储时对当前的时区进行转换,检索时再转换回当前时区
datetime 8 byte 实际格式保存 与时区无关

相关文章

网友评论

      本文标题:服务端传到客户端后,时间字段值天数减少1

      本文链接:https://www.haomeiwen.com/subject/yciivftx.html