最近在练手一个项目,虽然不是特别有深度的困难,但是我觉得还是记录一下,给我启航的道路留下一个脚印。
首先来看一下前端传进后台的数据

            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类型,我们只需要将二者的格式对齐就可以!