关于js与Java中Data与String相互转换中遇到的编码格式变化和时区变化的问题

关于Java中时间格式的转换,起因是项目数据库中用20180101格式的字符串存时间,

获取的值通过 date.insert(4, "-");
             date .insert(7, "-" );
转为2018-01-01传入前端的vue-table中,如右图

之后通过前端组件之间传值,将vue-table中的字符串时间传入DatePicker 日期选择器中,
如图:

由于在ES5之中,如果日期采用连词线(-)格式分隔,且具有前导0,
JavaScript会认为这是一个ISO格式的日期字符串,
导致返回的时间是以UTC时区计算的。(具体见参考链接:点击打开链接

之后保存数据,传入后台的数据为data,
格式为Fri Apr 20 2018 00:00:00 GMT+0800
但我们接收的model中存的是String,所以自动转为String形,
格式为 2018-04-19T16:00:00.000Z可以看出时间的时区变了。
在该情况下我们获取String会变成2018-04-19

与正确时间少了一天。

解决方法如下方法一:
因为无论在什么时区下,我们保存的毫秒数是一样的。
因此将String形数据修改时区,之后转为Data类型,
格式为yyyy-MM-dd'T'HH:mm:ss.SSS Z, 
值则变成1524153600000毫秒值,
之后Data转String格式为yyyy-MM-dd格式。
具体代码如下:
                     date = date .replace( "Z" , " UTC" );
                     SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS Z" );
                     Date date1 = format .parse( date );
                     DateFormat df = new SimpleDateFormat( "yyyy-MM-dd" );
                      return df .format( date1 );
方法二:在前端直接将时间转为String。具体方法(看链接: 点击打开链接

猜你喜欢

转载自blog.csdn.net/weixin_41191916/article/details/80496662