这周有个任务,需要根据给出任务时间,任务完成天数,计算出任务结束时间,其中需要减去当中的节假日(有个节假日表,来存储节假日的日期,任务开始时间与完成天数均为业务流程表中的字段)。
主要思路:设计线程在后台跑,来计算完成任务的时间。
主要难点:时间类型的转换,判断一天是否为节假日,
下面的是大概的思路代码。
long duration = 30; //将task对象中,在oracle数据库对应的日期开始时间取出,转换时间类型Timestamp-->java.util.Date
DateFormat dateFormat; dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); String cDate=String.valueOf(Task[i].getCreateDate()); java.util.Date createDate = dateFormat.parse(cDate);//util类型 //------------------做date数据类型转换----------------------- //结束日期加1,即从开始日期第二日计算 Calendar cal = Calendar.getInstance(); java.util.Date endDate = createDate; cal.setTime(endDate); cal.add(Calendar.DAY_OF_YEAR, 1); endDate.setTime(cal.getTime().getTime()); int j=0; while(j<duration-1){ while(Thread.isHoliday(endDate))//私有方法用来判断endDate是否为节假日
{ cal.setTime(endDate); cal.add(Calendar.DAY_OF_YEAR, 1); endDate.setTime(cal.getTime().getTime()); } cal.setTime(endDate); cal.add(Calendar.DAY_OF_YEAR, 1); endDate.setTime(cal.getTime().getTime()); j++; if(j==duration-1){ while(Thread.isHoliday(endDate)){ cal.setTime(endDate); cal.add(Calendar.DAY_OF_YEAR, 1); endDate.setTime(cal.getTime().getTime()); } //转换格式后,写到数据库中。
DateFormat df; df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");//设定格式
dateFormat.setLenient(false); String tempendDate = String.valueOf(endDate); java.util.Date timeDate = dateFormat.parse(tempendDate);//util类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
log.info(Task[i]); if(Task[i]!=null){ Task[i].setFinishPlanDate(dateTime); save(Task[i]); }
|
阅读(749) | 评论(0) | 转发(0) |