62,635
社区成员




import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestGzr {
static DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
public static String jsrq(String startDate, int days, Map<String, Integer> map) {
Date date = null;
try {
date = df.parse(startDate);
} catch (ParseException e) {
}
int i = 0;
while (i < days) {
// 获取日期是工作日还是假日
int type = getDayType(date, map);
if (type == 2) {
// 如果是工作日
i++;
}
if (i == days) {
break;
}
// 将日期往后延1天
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 1);
date = c.getTime();
}
return df.format(date);
}
/**
* 判断某个日期是工作日还是假日
*
* @param date
* @param map
* @return 假日返回1,工作日返回2
*/
public static int getDayType(Date date, Map<String, Integer> map) {
// 如果存在map中,则直接返回map中的数字
if (map.containsKey(df.format(date))) {
return map.get(df.format(date));
}
// 判断是周几
Calendar c = Calendar.getInstance();
c.setTime(date);
int day = c.get(Calendar.DAY_OF_WEEK);
if (day == 1 || day == 7) {
return 1;
} else {
return 2;
}
}
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
// 将数据库中的数据取出放入map中,key为日期,int为type
// 如果数据库中数据量非常多,可以根据开始日期和后延工作日按照规则取部分数据
map.put("2021-02-07", 2);
map.put("2021-02-11", 1);
map.put("2021-02-12", 1);
map.put("2021-02-15", 1);
map.put("2021-02-16", 1);
map.put("2021-02-17", 1);
map.put("2021-02-20", 2);
System.out.println(jsrq("2021-02-01", 3, map));
System.out.println(jsrq("2021-02-01", 6, map));
System.out.println(jsrq("2021-02-01", 7, map));
System.out.println(jsrq("2021-02-01", 10, map));
System.out.println(jsrq("2021-02-01", 15, map));
}
}
结果:
2021-02-03
2021-02-07
2021-02-08
2021-02-18
2021-02-24