使用java创建mysql一整年的节假日表,并根据节假日表判断当天日期是 工作日,还是双休日 还是节假日
时间: 2024-03-03 09:47:52 浏览: 154
好的,下面是Java代码实现:
1. 首先需要创建一个节假日表的实体类,例如:
```
public class Holiday {
private Long id;
private Date date; // 节假日日期
private String name; // 节假日名称,如“元旦节”、“春节”等
private Boolean isHoliday; // 是否为节假日,true表示是节假日,false表示是工作日
// 省略getter和setter方法
}
```
2. 接着,需要编写一个方法来创建一整年的节假日表。这里以中国的法定节假日为例,代码如下:
```
public static List<Holiday> createHolidayTable(int year) {
List<Holiday> holidayList = new ArrayList<>();
// 元旦节
holidayList.add(new Holiday(null, getDate(year, 1, 1), "元旦节", true));
// 春节
holidayList.add(new Holiday(null, getDate(year, 2, 4), "除夕", true)); // 除夕
holidayList.add(new Holiday(null, getDate(year, 2, 5), "春节", true)); // 春节第一天
holidayList.add(new Holiday(null, getDate(year, 2, 6), "春节", true)); // 春节第二天
holidayList.add(new Holiday(null, getDate(year, 2, 7), "春节", true)); // 春节第三天
holidayList.add(new Holiday(null, getDate(year, 2, 8), "春节", true)); // 春节第四天
holidayList.add(new Holiday(null, getDate(year, 2, 9), "春节", true)); // 春节第五天
holidayList.add(new Holiday(null, getDate(year, 2, 10), "春节", true)); // 春节第六天
// 清明节
holidayList.add(new Holiday(null, getDate(year, 4, 4), "清明节", true));
// 劳动节
holidayList.add(new Holiday(null, getDate(year, 5, 1), "劳动节", true));
// 端午节
holidayList.add(new Holiday(null, getDate(year, 6, 14), "端午节", true));
// 中秋节
holidayList.add(new Holiday(null, getDate(year, 9, 21), "中秋节", true));
// 国庆节
holidayList.add(new Holiday(null, getDate(year, 10, 1), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 2), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 3), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 4), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 5), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 6), "国庆节", true));
holidayList.add(new Holiday(null, getDate(year, 10, 7), "国庆节", true));
// 补班
holidayList.add(new Holiday(null, getDate(year, 2, 11), "春节调休", false));
holidayList.add(new Holiday(null, getDate(year, 2, 15), "春节调休", false));
holidayList.add(new Holiday(null, getDate(year, 4, 25), "清明节调休", false));
holidayList.add(new Holiday(null, getDate(year, 5, 8), "劳动节调休", false));
holidayList.add(new Holiday(null, getDate(year, 9, 27), "中秋节调休", false));
holidayList.add(new Holiday(null, getDate(year, 10, 10), "国庆节调休", false));
return holidayList;
}
private static Date getDate(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month - 1, day); // 月份从0开始计算,需要减1
return calendar.getTime();
}
```
这个方法接收一个年份作为参数,返回一个List<Holiday>类型的节假日表。这里使用了一个getDate方法来获取指定日期的Date类型,需要注意的是,Calendar中的月份是从0开始计算的,需要在传入月份时减去1。
3. 最后,需要根据节假日表判断当天日期是工作日、双休日还是节假日,代码如下:
```
@GetMapping("/checkDate")
public String checkDate(@RequestParam("date") Date date) {
List<Holiday> holidayList = createHolidayTable(2021); // 假设查询2021年的节假日表
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
for (Holiday holiday : holidayList) {
if (isSameDay(date, holiday.getDate())) {
if (holiday.getIsHoliday()) {
return holiday.getName();
} else {
return "工作日";
}
}
}
if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
return "周末";
} else {
return "工作日";
}
}
private static boolean isSameDay(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)
&& calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH)
&& calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}
```
这个方法接收一个日期作为参数,先调用createHolidayTable方法获取当年的节假日表,然后通过Calendar获取当天是星期几,再遍历节假日表,判断当天是否为节假日或工作日。如果是节假日,则返回节假日名称;如果是工作日,则返回“工作日”;如果是周末,则返回“周末”。其中,isSameDay方法用于判断两个日期是否为同一天。
阅读全文