当实体对应的日期类型是string时,如果不做处理,前端传递到后台的时间将会被转换成类似“ Aug 21 2018 00:00:00 GMT+0800 (中国标准时间)”格式的字符串
这种格式的字符串使用SimpleDateFormat类并不能直接转换,类型不对,当然可以使用字符串截取的方式去转换,这种方式并不是这篇文章介绍的重点
字符串截取后转换的方式:
public final static String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";
public final static String[] REPLACE_STRING = new String[]{"GMT+0800", "GMT+08:00"};
public final static String SPLIT_STRING = "(中国标准时间)";
public static Date str2Date(String dateString) {
try {
dateString = dateString.split(Pattern.quote(SPLIT_STRING))[0].replace(REPLACE_STRING[0], REPLACE_STRING[1]);
SimpleDateFormat sf1 = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss z", Locale.US);
Date date = sf1.parse(dateString);
return date;
} catch (Exception e) {
throw new RuntimeException("时间转化格式错误" + "[dateString=" + dateString + "]" + "[FORMAT_STRING=" + FORMAT_STRING + "]");
}
}
public static void main(String[] args) {
str2Date("Tue Aug 21 2018 00:00:00 GMT+0800 (中国标准时间) 00:00:00");
}
如果不通过这种方式的话,可以通过选择日期时将时间处理成毫秒值,然后后台在进行转换即可
前端使用vue+element,所以,我是通过element现成的属性转,其他框架可以使用js实现(实现方式自行百度)
<el-date-picker v-model="value3" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日" value-format="timestamp"> </el-date-picker>
之后再后台接收时
SimpleDateFormat trante = new SimpleDateFormat("yyyy-MM-dd"); //转换日期格式 Date date = new Date(); date.setTime(“毫秒值”); String format = trante.format(date);
这种方式还是比较简单的