Java编写 求某天之后的多少个工作日是哪天?

2013-06-21 三个工作日之后(下周三,26) 是哪天
工作日:周一至周五

public Date getDate(Date currentDate,int days){
//自由实现
//+思路

}

我从自己的工具类中使用了几个方法,一并贴出来供楼主参考:
/**
* 判断当前日期为星期几
* @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)。

楼主应该建立自己的常用工具类库,如日期,图片,字符串等等的常用处理(注意方法的复用),这样开发的效率会很高。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-22
public Date getDate(Date currentDate,int days){
Calendar calendar=Calendar.getInstance();
calendar.setTime(currentDate);
int i=0;
while(i<days){
calendar.add(Calendar.DATE,1);
i++;
if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY || 
calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
i--;
}
}
return calendar.getTime();
}

不管三七二十一,先加上一天,在判断这一天是不是休息日,是:减去一天,否则继续加...循环..知道满足终止条件


我还是蛮热心的吧...哈哈

第2个回答  2018-08-18
LZ需要考虑除了周末外,是否是节假日的情况,或者是周六、日也可能是补班的正常工作日情况。
第3个回答  2013-06-22
直接用 java.util.Calendar 就可进行所有的时间计算了,你从网上好好搜索下 Calendar 的用法。

在这里面给你简单说下如何实现:

首先,你用 java.text.SimpleDateFormat 将 2013-06-21 这个 String 转换格式化成一个 Date 值,
然后,直接用 java.util.Calendar 加载这个 Date,最后,在 Calendar 里面使用 :

Calendar c = .....
c.add(Day_Of_Week, 3);

在 Calendar 里面还有很多功能,自己详细体会一下。
第4个回答  2013-06-22
请问完成后可以加分么?谢谢。追问

50分的呢

追答

.....嗯,其实50分真的不少,只是我在考虑我电脑上没装jdk和eclipse,如果你肯。。。。我现在就安装,然后很用心的帮你写一个,现在正在纠结要不要呢?呵呵。哎。都是我不好。

追问

你决定 ,,睡觉先 明早上来收集答案,,写有的话就选满意回答 最中要是加思路

相似回答