百度国务院发布的这一年假期安排
http://www.gov.cn/zhengce/content/2020-11/25/content_5564127.htm
package JavaTime;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class WeekDays2021 {
//内部类
public static class Day{
//日期
private String dayStr;
//类型 0代表上班 1周末休息 2节假日
private Integer type;
public String getDayStr() {
return dayStr;
}
public void setDayStr(String dayStr) {
this.dayStr = dayStr;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
}
/**
* 获取某年内工作日、休息日、节假日
*
* @param year
* @return
*/
private static List<WorkDayUntil.Day> getDates(int year, List<String> holiday, List<String> makeWork) {
List<WorkDayUntil.Day> dates = new ArrayList<WorkDayUntil.Day>();
//日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 1; i <= 12; i++){
//Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,
// 创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, i - 1);
cal.set(Calendar.DATE, 1);
while (cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) < i) {
int day = cal.get(Calendar.DAY_OF_WEEK);
if ((day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
Date work = (Date) cal.getTime().clone();//复制一个相同的对象
WorkDayUntil.Day day1 = new WorkDayUntil.Day();
day1.setDayStr(sdf.format(work));
day1.setType(1); //休息日,先把所有的周六,周日设置为休息日
//遍历传入的holiday,和所有的周六周日 对比,找出节假日
for (String hstr:holiday) {
if(hstr.equals(sdf.format(work))){
day1.setType(2); //节假日
}
}
//遍历传入的调休工作日,把对应的周六,周日设为工作日
for (String wStr:makeWork) {
if(wStr.equals(sdf.format(work))){
day1.setType(0); //补班
}
}
dates.add(day1);
}
//所有的周一到周五
else{
Date work = (Date) cal.getTime().clone();
WorkDayUntil.Day day1 = new WorkDayUntil.Day();
//先把所有的周一到周五设置为工作日
day1.setDayStr(sdf.format(work));
day1.setType(0);
for (String hstr:holiday) {
if(hstr.equals(sdf.format(work))){
day1.setType(2);
}
}
dates.add(day1);
}
cal.add(Calendar.DATE, 1);//日期加1,下一天的循环
}
}
return dates;
}
public static void main(String[] args) {
//节假日
List<String> holiday = new ArrayList<>();
//补班
List<String> makeWork = new ArrayList<>();
//元旦
holiday.add("2021-01-01");
holiday.add("2021-01-02");
holiday.add("2021-01-031");
//春节
makeWork.add("2021-02-07");
makeWork.add("2021-02-20");
holiday.add("2021-02-11");
holiday.add("2021-02-12");
holiday.add("2021-02-13");
holiday.add("2021-02-14");
holiday.add("2021-02-15");
holiday.add("2021-02-16");
holiday.add("2021-02-17");
//清明
holiday.add("2021-04-03");
holiday.add("2021-04-04");
holiday.add("2021-04-05");
//五一
makeWork.add("2021-04-25");
holiday.add("2021-05-01");
holiday.add("20201-05-02");
holiday.add("2021-05-03");
holiday.add("2021-05-04");
holiday.add("2021-05-05");
makeWork.add("2021-05-08");
//端午节
holiday.add("2021-06-12");
holiday.add("2021-06-13");
holiday.add("2021-06-14");
//中秋
makeWork.add("2021-09-18");
holiday.add("2021-09-19");
holiday.add("2021-09-20");
holiday.add("2021-09-21");
//十一
makeWork.add("2021-09-26");
holiday.add("2021-10-01");
holiday.add("2021-10-02");
holiday.add("2021-10-03");
holiday.add("2021-10-04");
holiday.add("2021-10-05");
holiday.add("2021-10-06");
holiday.add("2021-10-07");
makeWork.add("2021-10-09");
//生成工作日、周末、节假日
List<WorkDayUntil.Day> dates = getDates(2020,holiday,makeWork);
dates.forEach(day -> {
System.out.println(day.getDayStr()+" "+day.getType());
});
// System.out.println(dates);
// String s = JSON.toJSONString(dates);
// System.out.println(s);
}
}
转自https://blog.csdn.net/hanxiaotao123/article/details/110477057?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=2