国家法定节假日
package com.newland.dateutil;
import java.text.ParseException;
import java.text.simpledateformat;
import java.util.Arrays;
import java.util.calendar;
import java.util.Date;
import java.util.List;
/**
* @author qyw
* @description 日期日历工具类
* @date Created in 21:01 2019/1/31
**/
public class ChineseCalendarUtils {
// 法律规定的放假日期
private List<String> lawHolidays = Arrays.asList("2017-12-30", "2017-12-31",
"2018-01-01", "2018-02-15", "2018-02-16", "2018-02-17", "2018-02-18",
"2018-02-19", "2018-02-20", "2018-02-21", "2018-04-05", "2018-04-06",
"2018-04-07", "2018-04-29", "2018-04-30", "2018-05-01", "2018-06-16",
"2018-06-17", "2018-06-18", "2018-09-22", "2018-09-23", "2018-09-24",
"2018-10-01", "2018-10-02", "2018-10-03", "2018-10-04", "2018-10-05",
"2018-10-06", "2018-10-07");
// 由于放假需要额外工作的周末
private List<String> extraWorkdays = Arrays.asList("2018-02-11", "2018-02-24",
"2018-04-08", "2018-04-28", "2018-09-29", "2018-09-30");
/**
* @author qyw
* @description 判断是否是法定假日
* @date Created in 21:03 2019/1/31
**/
public boolean isLawHoliday(String calendar) throws Exception {
ChineseCalendarUtils.isvaliddate(calendar);
if (lawHolidays.contains(calendar)) {
return true;
}
return false;
}
/**
* @author qyw
* @description 判断是否是周末
* @date Created in 21:03 2019/1/31
**/
public boolean isWeekends(String calendar) throws Exception {
ChineseCalendarUtils.isValidDate(calendar);
// 先将字符串类型的日期转换为Calendar类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(calendar);
Calendar ca = Calendar.getinstance();
ca.setTime(date);
if (ca.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| ca.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
return true;
}
return false;
}
/**
* @author qyw
* @description 判断是否是需要额外补班的周末
* @date Created in 21:06 2019/1/31
**/
public boolean isExtraWorkday(String calendar) throws Exception {
ChineseCalendarUtils.isValidDate(calendar);
if (extraWorkdays.contains(calendar)) {
return true;
}
return false;
}
/**
* @author qyw
* @description 判断是否是休息日(包含法定节假日和不需要补班的周末)
* @date Created in 21:06 2019/1/31
**/
public boolean isHoliday(String calendar) throws Exception {
ChineseCalendarUtils.isValidDate(calendar);
// 首先法定节假日必定是休息日
if (this.isLawHoliday(calendar)) {
return true;
}
// 排除法定节假日外的非周末必定是工作日
if (!this.isWeekends(calendar)) {
return false;
}
// 所有周末中只有非补班的才是休息日
if (this.isExtraWorkday(calendar)) {
return false;
}
return true;
}
/**
* @author qyw
* @description 校验字符串是否为指定的日期格式,含逻辑严格校验,2007/02/30返回false
* @date Created in 21:06 2019/1/31
**/
private static boolean isValidDate(String str) {
boolean convertSuccess = true;
// 指定日期格式为四位年/两位月份/两位日期,注意yyyy-MM-dd区分大小写;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
// 设置lenient为false.
// 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
format.setLenient(false);
format.parse(str);
} catch (ParseException e) {
convertSuccess = false;
}
return convertSuccess;
}
public static void main(String[] args) throws Exception {
String calendar = "2018-01-32";
ChineseCalendarUtils cc = new ChineseCalendarUtils();
System.out.println("输入的calendar是否是指定要求的格式:"+ChineseCalendarUtils.isValidDate(calendar));
System.out.println("是否是法定节假日:" + cc.isLawHoliday(calendar));
System.out.println("是否是周末:" + cc.isWeekends(calendar));
System.out.println("是否是需要额外补班的周末:" + cc.isExtraWorkday(calendar));
System.out.println("是否是休息日:" + cc.isHoliday(calendar));
}
}
相关阅读
Java开发者如何正确的使用String,StringBuffer,StringBu
通过前面的文章,我们知道String类最大的特点是不可变性,这意味着对String类的任何修改都会新生成一个字符串,比如你执行了String类的
Java递归函数递归:方法自己调用自己实现递归的三要素1.方法中出现自己调用自己2.要有分支3.要有结束条件 //求5的阶乘public class
java.lang.AbstractMethodError: null
在使用springcloud的时候运行报这个错,原因是版本冲突导致的,在idea中创建springcloud项目的时候,这里默认是${spring-cloud.vers
简介栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行
Java对象序列化为什么要使用SerialversionUID
1、首先谈谈为什么要序列化对象 - 把对象转换为字节序列的过程称为对象的序列化。 - 把字节序列恢复为对象的过程称为对