我从自己的工具类中使用了几个方法,一并贴出来供楼主参考:
/**
* 判断当前日期为星期几
* @param date
* @return
*/
public static int dayOfWeek(Date date){
Calendar aCalendar = Calendar.getInstance();
aCalendar.setTime(date);
int weekDay = aCalendar.get(Calendar.DAY_OF_WEEK);
return weekDay;
}
/**
* 获取指定日期指定天数后的日期
* @param date 指定日期
* @param index 指定天数
* @param flag 是否将时分秒归0
* @return
*/
public static Date getNextDate(Date date, int index, boolean flag){
Calendar cal = Calendar.getInstance();
cal.setTime(date);// 获得当前时间
if(flag){
// 日期不变,把时间设定为00:00:00
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
}
cal.set(Calendar.DATE, cal.get(Calendar.DATE) + index);
return cal.getTime();
}
public static Date getDate(Date currentDate,int days){
/*
* 1,根据传入日期获取下一天日期
* 2,判断下一天日期是否为工作日,如果是则设置下一次循环日期为此日期
* 如果不为工作日,为周6,日期前进2天,为
周天前进1天
* 3, 获取指定天数后的工作日
*/
Date date = currentDate;
/* 设置循环次数
* 如果含最后一天则循环 days + 1 天,不需要含最后一天,则循环 days次
* */
for(int i = 0; i < days + 1; i++){
Date nextDate = getNextDate(date,1,false); //获取下一天的日期
int weekDay = dayOfWeek(nextDate); //下一天日期为星期几
if(weekDay == 1){ //为星期六
date = getNextDate(date,2,false);
}else if(weekDay == 6){ //为星期天
date = getNextDate(date,3,false);
}else{
date = nextDate;
}
}
return date;
}
虽然这个满足楼主的需求,但是肯定有更简单的算法,现在要出门,来不及想了,先用用。
这个问题的思路我现在想到的就是判断下一日期是否为工作日,为周6怎样处理,为周日怎样处理。希望回来的时候能看到更好的计算方法(good luck)。
楼主应该建立自己的常用工具类库,如日期,图片,
字符串等等的常用处理(注意方法的复用),这样开发的效率会很高。