今天遇到这样一种需求,是一个检查设备是否运行正常的项目,先制定计划,然后审核通过之后,然后再生成执行的每天计划的具体时间:计划分为3种,按天执行,按周执行,按月执行,如我制定的计划时间段为2018-11-1到2019-1-31,每月的6号执行,然后需要审核,计划审核通过后要往数据库插入的数据为2018-11-6,2018-12-6,2019-1-6这3条数据,这只贴了按月计算的部分代码
//c代表计划制定时制定每月的几号执行计划
//两个日期做比较,没循环一次加一天
for(; !endTime.before(date.getTime()); date.add(Calendar.DAY_OF_MONTH, 1)){
//每月的第几号
if(date.get(Calendar.DAY_OF_MONTH) == c){
m++;
String[] startTimes = map_pss.get(c).getRateStartTime().split(":");
String[] endTimes = map_pss.get(c).getRateEndTime().split(":");
//开始时间
Calendar cal = Calendar.getInstance();
cal.setTime(date.getTime());
//设置小时
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startTimes[0]));
//设置分钟
cal.set(Calendar.MINUTE, Integer.parseInt(startTimes[1]));
//设置秒
//cal.set(Calendar.MILLISECOND, );
Date start = cal.getTime();
//结束时间
cal.set(Calendar.HOUR_OF_DAY,Integer.parseInt(endTimes[0]) );
cal.set(Calendar.MINUTE,Integer.parseInt(endTimes[1]) );
Date end = cal.getTime();
//符合条件插入到数据库
PlanSchedule planSchedule = new PlanSchedule();
planSchedule.setStartTime(start);
planSchedule.setEndTime(end);
planScheduleService.insert(planSchedule);
continue;
}
}
其实在开发中会经常用到Calendar ,Calendar 是个抽象类,主要用来操作日期时间字段的,很实用,API文档解释的也很清楚,精确到从历元至毫秒偏移量。
一篇不错的文章(使用小例子):https://blog.csdn.net/tiantangdizhibuxiang/article/details/77429346
其实这都是一些基础知识,只是自己之前用的太少,都不知道有这些东西,就算用到了也是想一些笨的方法计算出,其实已经有现成的函数,看别人写代码真是张知识(大神用几分钟的时间实现了这个逻辑,而要我实现起来,各种判断就是自己去写了,不知道要写多久。。。因为不知道有这些接口),以后还要夯实基础,基础很重要,还要学会要文档,其实文档写得很清楚。