最近在练手一个项目,虽然不是特别有深度的困难,但是我觉得还是记录一下,给我启航的道路留下一个脚印。
首先来看一下前端传进后台的数据
var startTime = dateChange(timeRange.split(' ~ ')[0]); var stopTime = dateChange(timeRange.split(' ~ ')[1]);
这是前端传来的时间类型,封装到map传到后台,来看一下后台接收到的样子
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str1=simpleDateFormat.format(map.get("startTime")); String str2=simpleDateFormat.format(map.get("stopTime"));
输出是这个样子
2021-08-15 18:51:29:2021-09-14 18:51:29
类中的开始结束时间是java.util.Date
private Date startTime; private Date stopTime;
存入mysql数据库中的数据是dateTime类型
刚刚我们处理好的数据是String类型的,所以需要转换成Date才能给对象的属性赋值,所以我们需要把String在转回Date类型才可以。于是有了一下这段代码。
userEntity.setStartTime(DateUtil.stringToDate(str1,DateUtil.DEF_DATE_FORMAT_STR)); userEntity.setStopTime(DateUtil.stringToDate(str2,DateUtil.DEF_DATE_FORMAT_STR));
调用了DateUtil工具类
public static final String DEF_DATE_FORMAT_STR = "yyyy-MM-dd HH:mm:ss"; public static Date stringToDate(String inStr, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); Date dt = sdf.parse(inStr, new ParsePosition(0)); return dt; }
到这,可算是把前端的时间戳以我想要的格式存进数据库中了。但是!遇到的坑还没说!
首先,我刚开始的思路是将前端的数据拿出来,转成Integer类型然后再按照要求得时间格式转换成Date然后存入数据库中。
于是,我开始了各种转换实验,首先由于前端使用map<String,Object>传递数据,所以我取出的stopTime是Object类型的。
Object不能直接转换为Integer,要先转成String类型的。
Integer.parseInt(String.valueOf(map.get("stopTime")));
执行了这段代码,拿到的是时间戳,不能直接封装成Date,于是看到了DateUtil包下的StringToDate方法,该方法返回的是一个Date类型的,我一看,这不正是我想要的么!
于是我立马改变思路!
Date date=DateUtil.stringToDate(String.valueOf(map.get("stopTime")),DateUtil.DEF_DATE_FORMAT_STR);
我高高兴兴第写完这行代码,把值赋给对象的stopTime属性,一运行,竟然是空值!
后来我研究了这个DateUtil类这个StringToDate方法,我发现传入的String类型的inStr,要转成与Pattern一样的格式才可以使用。到了这儿,豁然开朗,成功将前端的时间存到数据库中!!
传给Date类型的变量到了mysql中会被转成dateTime类型,我们只需要将二者的格式对齐就可以!