我国法定节假日:
1、元旦,放假1天(1月1日)
2、新年,放假3天(阴历除夕、正月初1、初二)
3、清明节,放假1天(清明当日)
4、劳动节,放假1天(5月1日)
5、端午节,放假1天(阴历端午当日)
6、中秋节,放假1天(阴历中秋当日)
7、国庆节,放假3天(10月1日、2日、3日)
共计11天,其中春节、端午节、中秋节 需要根据农历转换成心理,清明节的计算方法最复杂:
地球公转一周为黄经360度,当地球到达黄经零度时定为春分,而后每运行15度有一个节气,共有24节气,清明节就是根据这个节气计算出来的。
话不多说,上代码:
public class HolidayUtil {
public static Date getHoliday(String holidayName, int year) {
switch (holidayName) {
//元旦
case HolidayConstant.NEW_YEARS_DAY:
return DateUtil.parse(year + "-1-1");
//春节
case HolidayConstant.THE_SPRING_FESTIVAL:
ChineseDate theSpringFestival = new ChineseDate(year, 1, 1);
return theSpringFestival.getGregorianDate();
//清明
case HolidayConstant.TOMB_SWEEPING_FESTIVAL:
int param = year - 2000;
int tombSweepingFestival = (int) (param * 0.2422 + 4.81) - param / 4;
return DateUtil.parse(year + "-4-" + tombSweepingFestival);
//劳动节
case HolidayConstant.LABOUR_DAY:
return DateUtil.parse(year + "-5-1");
//端午
case HolidayConstant.THE_DRAGON_BOAT_FESTIVAL:
ChineseDate dragonBoatFestival = new ChineseDate(year, 5, 5);
return dragonBoatFestival.getGregorianDate();
//中秋
case HolidayConstant.MID_AUTUMN_FESTIVAL:
ChineseDate midAutumnFestival = new ChineseDate(year, 8, 15);
return midAutumnFestival.getGregorianDate();
//国庆
case HolidayConstant.NATIONAL_DAY:
return DateUtil.parse(year + "-10-1");
default:
return new Date();
}
}
}
public class HolidayConstant {
public final static String NEW_YEARS_DAY = "元旦节";
public final static String THE_SPRING_FESTIVAL = "春节";
public final static String TOMB_SWEEPING_FESTIVAL = "清明节";
public final static String LABOUR_DAY = "劳动节";
public final static String THE_DRAGON_BOAT_FESTIVAL = "端午节";
public final static String MID_AUTUMN_FESTIVAL = "中秋节";
public final static String NATIONAL_DAY = "国庆节";
}
需要计算那个节日的日期,只需要传进去就可以了