条件:开始时间,在不计算工作日下的结束时间(都是精确到秒的精确时间)。问题:算出只计算工作日下的实际时间。只考虑了去除周末的情形。
说不好思路了,看看代码吧,参数是开始时间和结束时间的毫秒数,返回的是实际时间的毫秒数
private static long OnlyWorkTime(long start, long end){
long endMill = 0L;
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date startDate = new Date(start);
Date endDate = new Date(end);
long workDay=0;
try {
Date startTempDate = sdf.parse(sdf.format(startDate));
Date endTempDate = sdf.parse(sdf.format(endDate));
long mod = end - endTempDate.getTime();
gc.setTime(startTempDate);
long time = endTempDate.getTime() - startTempDate.getTime();
long day = time/3600000/24;
System.out.println("day...." + day);
if(0 == day){
while(gc.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SATURDAY ||
gc.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY) {
gc.add(GregorianCalendar.DATE, 1);
}
}else{
while(workDay < day){
gc.add(GregorianCalendar.DATE, 1);
if (gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SATURDAY &&
gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SUNDAY) {
workDay++;
}
}
}
System.out.println("gc...." + sdf.format(gc.getTime()));
endMill = mod + gc.getTime().getTime();
System.out.println("endDate...." + new Date(endMill));
return endMill;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}