Java计算时间区间内工作日天数,并去除放假日与周末重叠数据
实际生活中,国家法定假日可能与周六周日重叠,所以需要去重。对于放假补班的特殊情况,需要另外补充
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Test {
public static void main(String[] args) throws ParseException {
workDay("2019-03-01~2019-05-08","section","");
}
public static boolean isWeekend(String bDate) throws ParseException {
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
Date bdate = format1.parse(bDate);
Calendar cal = Calendar.getInstance();
cal.setTime(bdate);
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
return true;
} else{
return false;
}
}
public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate = null;
Date endDate = null;
Calendar beginGC = null;
Calendar endGC = null;
List<String> list = new ArrayList<String>();
try {
beginDate = f.parse(beginDateStr);
endDate = f.parse(endDateStr);
beginGC = Calendar.getInstance();
beginGC.setTime(beginDate);
endGC = Calendar.getInstance();
endGC.setTime(endDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {
list.add(sdf.format(beginGC.getTime()));
beginGC.add(Calendar.DAY_OF_MONTH, 1);
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static List<String> getWeekendListOfDate(String beginDateStr, String endDateStr) {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate = null;
Date endDate = null;
Calendar beginGC = null;
Calendar endGC = null;
List<String> list = new ArrayList<String>();
try {
beginDate = f.parse(beginDateStr);
endDate = f.parse(endDateStr);
beginGC = Calendar.getInstance();
beginGC.setTime(beginDate);
endGC = Calendar.getInstance();
endGC.setTime(endDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {
int week = getWeek(beginGC.getTime());
if ( week == 1 || week == 7) {
list.add(sdf.format(beginGC.getTime()));
}
beginGC.add(Calendar.DAY_OF_MONTH, 1);
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static int getWeek(Date date){
Calendar c = new GregorianCalendar();
c.setTime(date);
int weekInt = c.get(Calendar.DAY_OF_WEEK);
return weekInt;
}
public static int workDay(String dateValue,String dateStuts,String schoolId) throws ParseException {
List<String> list = new ArrayList<String>();
list.add("2019-05-01");
list.add("2019-04-06");
list.add("2019-04-07");
list.add("2019-03-08");
if("day".equals(dateStuts)) {
if(list != null && !list.isEmpty()) {
return 1;
} else {
if(isWeekend(dateValue)) {
return 0;
} else {
return 1;
}
}
} else {
String dateFrom = dateValue.split("~")[0];
String dateTo = dateValue.split("~")[1];
if(dateFrom.equals(dateTo)) {
if(list != null && !list.isEmpty()) {
return 1;
} else {
if(isWeekend(dateFrom)) {
return 0;
} else {
return 1;
}
}
} else {
List<String> days = getDayListOfDate(dateFrom, dateTo);
List<String> weekends = getWeekendListOfDate(dateFrom, dateTo);
Set<String> holidaySet = new HashSet<String>();
holidaySet.addAll(list);
holidaySet.addAll(weekends);
Iterator<String> iterator = holidaySet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
return 0;
}
}
}
}