代码
import cn. hutool. core. text. StrFormatter ;
import com. google. common. collect. Lists ;
import lombok. Data ; import java. time. LocalDate ;
import java. time. format. TextStyle ;
import java. util. ArrayList ;
import java. util. Collections ;
import java. util. HashMap ;
import java. util. List ;
import java. util. Locale ;
import java. util. Map ;
import java. util. stream. Collectors ; public class HolidayCalculator { public static void main ( String [ ] args) { HolidayCalculator calculator = new HolidayCalculator ( ) ; Map < Integer , List < Holiday > > holidays = calculator. holidays ( ) ; int maxYear = holidays. keySet ( ) . stream ( ) . max ( Integer :: compareTo ) . get ( ) ; LocalDate date = LocalDate . now ( ) ; while ( true ) { Info info = calculator. calculate ( date, holidays) ; System . out. println ( info. info ( ) ) ; date = date. plusDays ( 1 ) ; if ( date. getYear ( ) > maxYear) { break ; } } } private Map < Integer , List < Holiday > > holidays ( ) { Map < Integer , List < Holiday > > holidays = new HashMap < > ( ) ; holidays. put ( 2024 , Lists . newArrayList ( new Holiday ( "元旦" , "2024-01-01" ) , new Holiday ( "春节" , "2024-02-10" , "2024-02-17" , Lists . newArrayList ( "2024-02-04" , "2024-02-18" ) ) , new Holiday ( "清明节" , "2024-04-04" , "2024-04-06" , Lists . newArrayList ( "2024-04-07" ) ) , new Holiday ( "劳动节" , "2024-05-01" , "2024-05-05" , Lists . newArrayList ( "2024-04-28" , "2024-05-11" ) ) , new Holiday ( "端午节" , "2024-06-10" ) , new Holiday ( "中秋节" , "2024-09-15" , "2024-09-17" , Lists . newArrayList ( "2024-09-14" ) ) , new Holiday ( "国庆节" , "2024-10-01" , "2024-10-07" , Lists . newArrayList ( "2024-09-29" , "2024-10-12" ) ) ) ) ; return holidays; } public Info calculate ( LocalDate date, Map < Integer , List < Holiday > > holidays) { return this . calculate ( date, holidays. getOrDefault ( date. getYear ( ) , new ArrayList < > ( ) ) ) ; } public Info calculate ( LocalDate date, List < Holiday > holidays) { for ( Holiday holiday : holidays) { if ( ! date. isBefore ( holiday. getStart ( ) ) && ! date. isAfter ( holiday. getEnd ( ) ) ) { return new Info ( date, Type . HOLIDAY , holiday. getName ( ) ) ; } for ( LocalDate overtime : holiday. getOvertime ( ) ) { if ( date. isEqual ( overtime) ) { return new Info ( date, Type . OVERTIME , holiday. getName ( ) + "-调休" ) ; } } } if ( date. getDayOfWeek ( ) . getValue ( ) <= 5 ) { return new Info ( date, Type . WORKDAY ) ; } else { return new Info ( date, Type . WEEKEND ) ; } } public enum Type { WORKDAY , WEEKEND , HOLIDAY , OVERTIME ; public static boolean isWorkday ( Type type) { return WORKDAY == type || OVERTIME == type; } } @Data public static class Holiday { private String name; private LocalDate start; private LocalDate end; private List < LocalDate > overtime; public Holiday ( String name, String start) { this . name = name; this . start = LocalDate . parse ( start) ; this . end = LocalDate . parse ( start) ; this . overtime = Collections . emptyList ( ) ; } public Holiday ( String name, String start, String end) { this . name = name; this . start = LocalDate . parse ( start) ; this . end = LocalDate . parse ( end) ; this . overtime = Collections . emptyList ( ) ; } public Holiday ( String name, String start, String end, List < String > overtime) { this . name = name; this . start = LocalDate . parse ( start) ; this . end = LocalDate . parse ( end) ; this . overtime = overtime. stream ( ) . map ( LocalDate :: parse ) . collect ( Collectors . toList ( ) ) ; } } @Data public static class Info { private LocalDate date; private Type type; private boolean workday; private String remark; public Info ( LocalDate date, Type type) { this . date = date; this . type = type; this . workday = Type . isWorkday ( type) ; this . remark = date. getDayOfWeek ( ) . getDisplayName ( TextStyle . FULL , Locale . CHINA ) ; } public Info ( LocalDate date, Type type, String remark) { this . date = date; this . type = type; this . workday = Type . isWorkday ( type) ; this . remark = remark; } public String info ( ) { return StrFormatter . format ( "{} \t {} \t {} \t {}" , date, workday ? "上班" : "放假" , type, remark) ; } }
}
结果
2023-12-25 上班 WORKDAY 星期一
2023-12-26 上班 WORKDAY 星期二
2023-12-27 上班 WORKDAY 星期三
2023-12-28 上班 WORKDAY 星期四
2023-12-29 上班 WORKDAY 星期五
2023-12-30 放假 WEEKEND 星期六
2023-12-31 放假 WEEKEND 星期日
2024-01-01 放假 HOLIDAY 元旦
2024-01-02 上班 WORKDAY 星期二
2024-01-03 上班 WORKDAY 星期三
2024-01-04 上班 WORKDAY 星期四
2024-01-05 上班 WORKDAY 星期五
2024-01-06 放假 WEEKEND 星期六
2024-01-07 放假 WEEKEND 星期日
2024-01-08 上班 WORKDAY 星期一
2024-01-09 上班 WORKDAY 星期二
2024-01-10 上班 WORKDAY 星期三
2024-01-11 上班 WORKDAY 星期四
2024-01-12 上班 WORKDAY 星期五
2024-01-13 放假 WEEKEND 星期六
2024-01-14 放假 WEEKEND 星期日
2024-01-15 上班 WORKDAY 星期一
2024-01-16 上班 WORKDAY 星期二
2024-01-17 上班 WORKDAY 星期三
2024-01-18 上班 WORKDAY 星期四
2024-01-19 上班 WORKDAY 星期五
2024-01-20 放假 WEEKEND 星期六
2024-01-21 放假 WEEKEND 星期日
2024-01-22 上班 WORKDAY 星期一
2024-01-23 上班 WORKDAY 星期二
2024-01-24 上班 WORKDAY 星期三
2024-01-25 上班 WORKDAY 星期四
2024-01-26 上班 WORKDAY 星期五
2024-01-27 放假 WEEKEND 星期六
2024-01-28 放假 WEEKEND 星期日
2024-01-29 上班 WORKDAY 星期一
2024-01-30 上班 WORKDAY 星期二
2024-01-31 上班 WORKDAY 星期三
2024-02-01 上班 WORKDAY 星期四
2024-02-02 上班 WORKDAY 星期五
2024-02-03 放假 WEEKEND 星期六
2024-02-04 上班 OVERTIME 春节-调休
2024-02-05 上班 WORKDAY 星期一
2024-02-06 上班 WORKDAY 星期二
2024-02-07 上班 WORKDAY 星期三
2024-02-08 上班 WORKDAY 星期四
2024-02-09 上班 WORKDAY 星期五
2024-02-10 放假 HOLIDAY 春节
2024-02-11 放假 HOLIDAY 春节
2024-02-12 放假 HOLIDAY 春节
2024-02-13 放假 HOLIDAY 春节
2024-02-14 放假 HOLIDAY 春节
2024-02-15 放假 HOLIDAY 春节
2024-02-16 放假 HOLIDAY 春节
2024-02-17 放假 HOLIDAY 春节
2024-02-18 上班 OVERTIME 春节-调休
2024-02-19 上班 WORKDAY 星期一
2024-02-20 上班 WORKDAY 星期二
2024-02-21 上班 WORKDAY 星期三
2024-02-22 上班 WORKDAY 星期四
2024-02-23 上班 WORKDAY 星期五
2024-02-24 放假 WEEKEND 星期六
2024-02-25 放假 WEEKEND 星期日
2024-02-26 上班 WORKDAY 星期一
2024-02-27 上班 WORKDAY 星期二
2024-02-28 上班 WORKDAY 星期三
2024-02-29 上班 WORKDAY 星期四
2024-03-01 上班 WORKDAY 星期五
2024-03-02 放假 WEEKEND 星期六
2024-03-03 放假 WEEKEND 星期日
2024-03-04 上班 WORKDAY 星期一
2024-03-05 上班 WORKDAY 星期二
2024-03-06 上班 WORKDAY 星期三
2024-03-07 上班 WORKDAY 星期四
2024-03-08 上班 WORKDAY 星期五
2024-03-09 放假 WEEKEND 星期六
2024-03-10 放假 WEEKEND 星期日
2024-03-11 上班 WORKDAY 星期一
2024-03-12 上班 WORKDAY 星期二
2024-03-13 上班 WORKDAY 星期三
2024-03-14 上班 WORKDAY 星期四
2024-03-15 上班 WORKDAY 星期五
2024-03-16 放假 WEEKEND 星期六
2024-03-17 放假 WEEKEND 星期日
2024-03-18 上班 WORKDAY 星期一
2024-03-19 上班 WORKDAY 星期二
2024-03-20 上班 WORKDAY 星期三
2024-03-21 上班 WORKDAY 星期四
2024-03-22 上班 WORKDAY 星期五
2024-03-23 放假 WEEKEND 星期六
2024-03-24 放假 WEEKEND 星期日
2024-03-25 上班 WORKDAY 星期一
2024-03-26 上班 WORKDAY 星期二
2024-03-27 上班 WORKDAY 星期三
2024-03-28 上班 WORKDAY 星期四
2024-03-29 上班 WORKDAY 星期五
2024-03-30 放假 WEEKEND 星期六
2024-03-31 放假 WEEKEND 星期日
2024-04-01 上班 WORKDAY 星期一
2024-04-02 上班 WORKDAY 星期二
2024-04-03 上班 WORKDAY 星期三
2024-04-04 放假 HOLIDAY 清明节
2024-04-05 放假 HOLIDAY 清明节
2024-04-06 放假 HOLIDAY 清明节
2024-04-07 上班 OVERTIME 清明节-调休
2024-04-08 上班 WORKDAY 星期一
2024-04-09 上班 WORKDAY 星期二
2024-04-10 上班 WORKDAY 星期三
2024-04-11 上班 WORKDAY 星期四
2024-04-12 上班 WORKDAY 星期五
2024-04-13 放假 WEEKEND 星期六
2024-04-14 放假 WEEKEND 星期日
2024-04-15 上班 WORKDAY 星期一
2024-04-16 上班 WORKDAY 星期二
2024-04-17 上班 WORKDAY 星期三
2024-04-18 上班 WORKDAY 星期四
2024-04-19 上班 WORKDAY 星期五
2024-04-20 放假 WEEKEND 星期六
2024-04-21 放假 WEEKEND 星期日
2024-04-22 上班 WORKDAY 星期一
2024-04-23 上班 WORKDAY 星期二
2024-04-24 上班 WORKDAY 星期三
2024-04-25 上班 WORKDAY 星期四
2024-04-26 上班 WORKDAY 星期五
2024-04-27 放假 WEEKEND 星期六
2024-04-28 上班 OVERTIME 劳动节-调休
2024-04-29 上班 WORKDAY 星期一
2024-04-30 上班 WORKDAY 星期二
2024-05-01 放假 HOLIDAY 劳动节
2024-05-02 放假 HOLIDAY 劳动节
2024-05-03 放假 HOLIDAY 劳动节
2024-05-04 放假 HOLIDAY 劳动节
2024-05-05 放假 HOLIDAY 劳动节
2024-05-06 上班 WORKDAY 星期一
2024-05-07 上班 WORKDAY 星期二
2024-05-08 上班 WORKDAY 星期三
2024-05-09 上班 WORKDAY 星期四
2024-05-10 上班 WORKDAY 星期五
2024-05-11 上班 OVERTIME 劳动节-调休
2024-05-12 放假 WEEKEND 星期日
2024-05-13 上班 WORKDAY 星期一
2024-05-14 上班 WORKDAY 星期二
2024-05-15 上班 WORKDAY 星期三
2024-05-16 上班 WORKDAY 星期四
2024-05-17 上班 WORKDAY 星期五
2024-05-18 放假 WEEKEND 星期六
2024-05-19 放假 WEEKEND 星期日
2024-05-20 上班 WORKDAY 星期一
2024-05-21 上班 WORKDAY 星期二
2024-05-22 上班 WORKDAY 星期三
2024-05-23 上班 WORKDAY 星期四
2024-05-24 上班 WORKDAY 星期五
2024-05-25 放假 WEEKEND 星期六
2024-05-26 放假 WEEKEND 星期日
2024-05-27 上班 WORKDAY 星期一
2024-05-28 上班 WORKDAY 星期二
2024-05-29 上班 WORKDAY 星期三
2024-05-30 上班 WORKDAY 星期四
2024-05-31 上班 WORKDAY 星期五
2024-06-01 放假 WEEKEND 星期六
2024-06-02 放假 WEEKEND 星期日
2024-06-03 上班 WORKDAY 星期一
2024-06-04 上班 WORKDAY 星期二
2024-06-05 上班 WORKDAY 星期三
2024-06-06 上班 WORKDAY 星期四
2024-06-07 上班 WORKDAY 星期五
2024-06-08 放假 WEEKEND 星期六
2024-06-09 放假 WEEKEND 星期日
2024-06-10 放假 HOLIDAY 端午节
2024-06-11 上班 WORKDAY 星期二
2024-06-12 上班 WORKDAY 星期三
2024-06-13 上班 WORKDAY 星期四
2024-06-14 上班 WORKDAY 星期五
2024-06-15 放假 WEEKEND 星期六
2024-06-16 放假 WEEKEND 星期日
2024-06-17 上班 WORKDAY 星期一
2024-06-18 上班 WORKDAY 星期二
2024-06-19 上班 WORKDAY 星期三
2024-06-20 上班 WORKDAY 星期四
2024-06-21 上班 WORKDAY 星期五
2024-06-22 放假 WEEKEND 星期六
2024-06-23 放假 WEEKEND 星期日
2024-06-24 上班 WORKDAY 星期一
2024-06-25 上班 WORKDAY 星期二
2024-06-26 上班 WORKDAY 星期三
2024-06-27 上班 WORKDAY 星期四
2024-06-28 上班 WORKDAY 星期五
2024-06-29 放假 WEEKEND 星期六
2024-06-30 放假 WEEKEND 星期日
2024-07-01 上班 WORKDAY 星期一
2024-07-02 上班 WORKDAY 星期二
2024-07-03 上班 WORKDAY 星期三
2024-07-04 上班 WORKDAY 星期四
2024-07-05 上班 WORKDAY 星期五
2024-07-06 放假 WEEKEND 星期六
2024-07-07 放假 WEEKEND 星期日
2024-07-08 上班 WORKDAY 星期一
2024-07-09 上班 WORKDAY 星期二
2024-07-10 上班 WORKDAY 星期三
2024-07-11 上班 WORKDAY 星期四
2024-07-12 上班 WORKDAY 星期五
2024-07-13 放假 WEEKEND 星期六
2024-07-14 放假 WEEKEND 星期日
2024-07-15 上班 WORKDAY 星期一
2024-07-16 上班 WORKDAY 星期二
2024-07-17 上班 WORKDAY 星期三
2024-07-18 上班 WORKDAY 星期四
2024-07-19 上班 WORKDAY 星期五
2024-07-20 放假 WEEKEND 星期六
2024-07-21 放假 WEEKEND 星期日
2024-07-22 上班 WORKDAY 星期一
2024-07-23 上班 WORKDAY 星期二
2024-07-24 上班 WORKDAY 星期三
2024-07-25 上班 WORKDAY 星期四
2024-07-26 上班 WORKDAY 星期五
2024-07-27 放假 WEEKEND 星期六
2024-07-28 放假 WEEKEND 星期日
2024-07-29 上班 WORKDAY 星期一
2024-07-30 上班 WORKDAY 星期二
2024-07-31 上班 WORKDAY 星期三
2024-08-01 上班 WORKDAY 星期四
2024-08-02 上班 WORKDAY 星期五
2024-08-03 放假 WEEKEND 星期六
2024-08-04 放假 WEEKEND 星期日
2024-08-05 上班 WORKDAY 星期一
2024-08-06 上班 WORKDAY 星期二
2024-08-07 上班 WORKDAY 星期三
2024-08-08 上班 WORKDAY 星期四
2024-08-09 上班 WORKDAY 星期五
2024-08-10 放假 WEEKEND 星期六
2024-08-11 放假 WEEKEND 星期日
2024-08-12 上班 WORKDAY 星期一
2024-08-13 上班 WORKDAY 星期二
2024-08-14 上班 WORKDAY 星期三
2024-08-15 上班 WORKDAY 星期四
2024-08-16 上班 WORKDAY 星期五
2024-08-17 放假 WEEKEND 星期六
2024-08-18 放假 WEEKEND 星期日
2024-08-19 上班 WORKDAY 星期一
2024-08-20 上班 WORKDAY 星期二
2024-08-21 上班 WORKDAY 星期三
2024-08-22 上班 WORKDAY 星期四
2024-08-23 上班 WORKDAY 星期五
2024-08-24 放假 WEEKEND 星期六
2024-08-25 放假 WEEKEND 星期日
2024-08-26 上班 WORKDAY 星期一
2024-08-27 上班 WORKDAY 星期二
2024-08-28 上班 WORKDAY 星期三
2024-08-29 上班 WORKDAY 星期四
2024-08-30 上班 WORKDAY 星期五
2024-08-31 放假 WEEKEND 星期六
2024-09-01 放假 WEEKEND 星期日
2024-09-02 上班 WORKDAY 星期一
2024-09-03 上班 WORKDAY 星期二
2024-09-04 上班 WORKDAY 星期三
2024-09-05 上班 WORKDAY 星期四
2024-09-06 上班 WORKDAY 星期五
2024-09-07 放假 WEEKEND 星期六
2024-09-08 放假 WEEKEND 星期日
2024-09-09 上班 WORKDAY 星期一
2024-09-10 上班 WORKDAY 星期二
2024-09-11 上班 WORKDAY 星期三
2024-09-12 上班 WORKDAY 星期四
2024-09-13 上班 WORKDAY 星期五
2024-09-14 上班 OVERTIME 中秋节-调休
2024-09-15 放假 HOLIDAY 中秋节
2024-09-16 放假 HOLIDAY 中秋节
2024-09-17 放假 HOLIDAY 中秋节
2024-09-18 上班 WORKDAY 星期三
2024-09-19 上班 WORKDAY 星期四
2024-09-20 上班 WORKDAY 星期五
2024-09-21 放假 WEEKEND 星期六
2024-09-22 放假 WEEKEND 星期日
2024-09-23 上班 WORKDAY 星期一
2024-09-24 上班 WORKDAY 星期二
2024-09-25 上班 WORKDAY 星期三
2024-09-26 上班 WORKDAY 星期四
2024-09-27 上班 WORKDAY 星期五
2024-09-28 放假 WEEKEND 星期六
2024-09-29 上班 OVERTIME 国庆节-调休
2024-09-30 上班 WORKDAY 星期一
2024-10-01 放假 HOLIDAY 国庆节
2024-10-02 放假 HOLIDAY 国庆节
2024-10-03 放假 HOLIDAY 国庆节
2024-10-04 放假 HOLIDAY 国庆节
2024-10-05 放假 HOLIDAY 国庆节
2024-10-06 放假 HOLIDAY 国庆节
2024-10-07 放假 HOLIDAY 国庆节
2024-10-08 上班 WORKDAY 星期二
2024-10-09 上班 WORKDAY 星期三
2024-10-10 上班 WORKDAY 星期四
2024-10-11 上班 WORKDAY 星期五
2024-10-12 上班 OVERTIME 国庆节-调休
2024-10-13 放假 WEEKEND 星期日
2024-10-14 上班 WORKDAY 星期一
2024-10-15 上班 WORKDAY 星期二
2024-10-16 上班 WORKDAY 星期三
2024-10-17 上班 WORKDAY 星期四
2024-10-18 上班 WORKDAY 星期五
2024-10-19 放假 WEEKEND 星期六
2024-10-20 放假 WEEKEND 星期日
2024-10-21 上班 WORKDAY 星期一
2024-10-22 上班 WORKDAY 星期二
2024-10-23 上班 WORKDAY 星期三
2024-10-24 上班 WORKDAY 星期四
2024-10-25 上班 WORKDAY 星期五
2024-10-26 放假 WEEKEND 星期六
2024-10-27 放假 WEEKEND 星期日
2024-10-28 上班 WORKDAY 星期一
2024-10-29 上班 WORKDAY 星期二
2024-10-30 上班 WORKDAY 星期三
2024-10-31 上班 WORKDAY 星期四
2024-11-01 上班 WORKDAY 星期五
2024-11-02 放假 WEEKEND 星期六
2024-11-03 放假 WEEKEND 星期日
2024-11-04 上班 WORKDAY 星期一
2024-11-05 上班 WORKDAY 星期二
2024-11-06 上班 WORKDAY 星期三
2024-11-07 上班 WORKDAY 星期四
2024-11-08 上班 WORKDAY 星期五
2024-11-09 放假 WEEKEND 星期六
2024-11-10 放假 WEEKEND 星期日
2024-11-11 上班 WORKDAY 星期一
2024-11-12 上班 WORKDAY 星期二
2024-11-13 上班 WORKDAY 星期三
2024-11-14 上班 WORKDAY 星期四
2024-11-15 上班 WORKDAY 星期五
2024-11-16 放假 WEEKEND 星期六
2024-11-17 放假 WEEKEND 星期日
2024-11-18 上班 WORKDAY 星期一
2024-11-19 上班 WORKDAY 星期二
2024-11-20 上班 WORKDAY 星期三
2024-11-21 上班 WORKDAY 星期四
2024-11-22 上班 WORKDAY 星期五
2024-11-23 放假 WEEKEND 星期六
2024-11-24 放假 WEEKEND 星期日
2024-11-25 上班 WORKDAY 星期一
2024-11-26 上班 WORKDAY 星期二
2024-11-27 上班 WORKDAY 星期三
2024-11-28 上班 WORKDAY 星期四
2024-11-29 上班 WORKDAY 星期五
2024-11-30 放假 WEEKEND 星期六
2024-12-01 放假 WEEKEND 星期日
2024-12-02 上班 WORKDAY 星期一
2024-12-03 上班 WORKDAY 星期二
2024-12-04 上班 WORKDAY 星期三
2024-12-05 上班 WORKDAY 星期四
2024-12-06 上班 WORKDAY 星期五
2024-12-07 放假 WEEKEND 星期六
2024-12-08 放假 WEEKEND 星期日
2024-12-09 上班 WORKDAY 星期一
2024-12-10 上班 WORKDAY 星期二
2024-12-11 上班 WORKDAY 星期三
2024-12-12 上班 WORKDAY 星期四
2024-12-13 上班 WORKDAY 星期五
2024-12-14 放假 WEEKEND 星期六
2024-12-15 放假 WEEKEND 星期日
2024-12-16 上班 WORKDAY 星期一
2024-12-17 上班 WORKDAY 星期二
2024-12-18 上班 WORKDAY 星期三
2024-12-19 上班 WORKDAY 星期四
2024-12-20 上班 WORKDAY 星期五
2024-12-21 放假 WEEKEND 星期六
2024-12-22 放假 WEEKEND 星期日
2024-12-23 上班 WORKDAY 星期一
2024-12-24 上班 WORKDAY 星期二
2024-12-25 上班 WORKDAY 星期三
2024-12-26 上班 WORKDAY 星期四
2024-12-27 上班 WORKDAY 星期五
2024-12-28 放假 WEEKEND 星期六
2024-12-29 放假 WEEKEND 星期日
2024-12-30 上班 WORKDAY 星期一
2024-12-31 上班 WORKDAY 星期二