JAVA 获取一年的工作日。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
*获取一年的工作日 */
public class HolidayUtils {
private static SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat MM = new SimpleDateFormat("MM");
/**节假日**/
private static List<String> holidayList = new ArrayList<String>();
/**补班日**/
private static List<String> workList = new ArrayList<String>();
static {
/**特殊的日期可以单独配置到数据库**/
holidayList.add("2023-01-01"); //元旦 holidayList.add("2023-01-02"); // 元旦 holidayList.add("2023-01-21"); // 春节 holidayList.add("2023-01-22"); // 春节 holidayList.add("2023-01-23"); // 春节 holidayList.add("2023-01-24"); // 春节 holidayList.add("2023-01-25"); // 春节 holidayList.add("2023-01-26"); // 春节 holidayList.add("2023-01-27"); // 春节 workList.add("2023-01-28"); // 春节- 补班 workList.add("2023-01-29"); // 春节- 补班 holidayList.add("2023-04-05"); // 清明节 workList.add("2023-04-23"); // 劳动节- 补班 workList.add("2023-05-06"); // 劳动节- 补班 holidayList.add("2023-04-29"); // 劳动节 holidayList.add("2023-04-30"); // 劳动节 holidayList.add("2023-05-01"); // 劳动节 holidayList.add("2023-05-02"); // 劳动节 holidayList.add("2023-05-03"); // 劳动节 holidayList.add("2023-06-22"); // 端午节 holidayList.add("2023-06-23"); // 端午节 workList.add("2023-06-24"); // 端午节 holidayList.add("2023-06-25"); // 端午节- 补班 holidayList.add("2023-09-29"); // 中秋/ 国庆节 holidayList.add("2023-09-30"); // 中秋/ 国庆节 holidayList.add("2023-10-01"); // 中秋/ 国庆节 holidayList.add("2023-10-02"); // 中秋/ 国庆节 holidayList.add("2023-10-03"); // 中秋/ 国庆节 holidayList.add("2023-10-04"); // 中秋/ 国庆节 holidayList.add("2023-10-05"); // 中秋/ 国庆节 holidayList.add("2023-10-06"); // 中秋/ 国庆节 workList.add("2023-10-07"); // 中秋/ 国庆节- 补班 workList.add("2023-10-08"); // 中秋/ 国庆节- 补班 }
public static void main(String[] args) throws Exception{
printYearAllWorkDay(2023);
}
public static void printYearAllWorkDay(Integer year) throws Exception{
System.out.println(year+"年工作日如下---------------");
/**某年所有工作日**/
List<String> dateListByYear = getYearAllWorkDay(year);
int mm = 1;
int mmCount = 0;
System.out.println(year+"年工作日共有"+dateListByYear.size()+" 天");
for (int i = 0; i < dateListByYear.size(); i++) {
String date = dateListByYear.get(i);
Integer month = Integer.valueOf(MM.format(yyyyMMdd.parse(date)));
if(mm != month){
mm = month;
System.out.println("\n"+year+"年"+(mm-1)+" 月工作日, 共"+mmCount+" 天");
mmCount = 0;
System.out.println("\n"+year+"年"+mm+" 月工作日---------------");
}
mmCount++;
System.out.print(date+",");
}
}
/**
*计算指定年份的所有工作日,格式如 yyyy-MM-dd
* @param year
* @return
*/
private static List<String> getYearAllWorkDay(Integer year) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
List<String> allDateList = new ArrayList<>();
try {
Calendar ca=Calendar.getInstance();
ca.setTime((new SimpleDateFormat("yyyy")).parse(year+""));
while(true){
Date time = ca.getTime();
String date1 = yyyyMMdd.format(time.getTime());
if(isWorkDay(time)){ //工作日 allDateList.add(date1);
}
ca.add(Calendar.DAY_OF_YEAR, 1); //加一天 if(ca.get(Calendar.YEAR)>year)
break;
}
} catch (ParseException e) {
e.printStackTrace();
}
return allDateList;
}
/**
*判断一个日期是否为工作日( 考虑节假日,补班日)
* @param date
* @return
*/
public static boolean isWorkDay(Date date) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
Date time = cd.getTime();
String format2 = yyyyMMdd.format(time);
/**处理周一~ 周五补班**/
if(workList.contains(format2)){
return true;
}
/**节假日**/
if(holidayList.contains(format2)){
return false;
}
if (dayOfWeek != Calendar.SUNDAY && dayOfWeek != Calendar.SATURDAY){
return true;
}
return false;
}
}