关于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。具体方法(看链接:
点击打开链接)