最全的时间工具类

开箱即用

public abstract class MyDateUtil {/*** 时区误差*/private static long timeZoneError = 0;/*** 添加更多支持日期字符串格式* 默认支持:yyyyMMdd[ HHmmss]、yyyy-MM-dd[ HH:mm:ss]、yyyy/MM/dd[ HH:mm:ss]*/private static List<String> patternList = new ArrayList<>();/*** 全局工作日配置*/private static WorkdayConfig workdayConfig;static {timeZoneError = new DateTime("1970-01-01").getTime();initHolidat();//添加更多日期格式
//      patternList.add("dd-MM-yyyy");}/*** 工作日设置* @return WorkdayConfig*/public static WorkdayConfig workdayConfig() {if (workdayConfig == null) {workdayConfig = new WorkdayConfig();}return workdayConfig;}/*** 获取一个当前的工作日配置* @return WorkdayConfig*/public static WorkdayConfig getWorkdayConfig() {try {return (WorkdayConfig) workdayConfig().clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return new WorkdayConfig();}/*** 日期格式化成字符串** @param date* @param pattern* @return String*/public static String format(Date date, String pattern) {if (date == null) {return null;}SimpleDateFormat fmt = new SimpleDateFormat(pattern);return fmt.format(date);}/*** 根据语言和格式,格式化日期成字符串** @param date* @param pattern* @param locale* @return String*/public static String format(Date date, String pattern, Locale locale) {DateFormatSymbols symbols = new DateFormatSymbols(locale);SimpleDateFormat fmt = new SimpleDateFormat(pattern, symbols);return fmt.format(date);}/*** 日期字符串转换成日期** @param date* @param pattern* @return DateTime*/public static DateTime parseDate(String date, String pattern) {SimpleDateFormat format = new SimpleDateFormat(pattern);try {return new DateTime(format.parse(date));} catch (ParseException e) {throw new IllegalArgumentException("字符串转日期失败,日期'" + date + "'与格式'" + pattern + "'不对应");}}/*** <p>日期字符串转换成日期,自动识别格式</p>* 默认支持yyyyMMdd[ HHmmss]、yyyy-MM-dd[ HH:mm:ss]、yyyy/MM/dd[ HH:mm:ss]<br>* 如果频繁使用该方法转换日期,又需要效率,那尽量使用 {@link #parseDate(String, String)} 方法** @param date* @return DateTime* @see DateUtil# 自定义支持列表*/public static DateTime parseDate(String date) {if (patternList != null && !patternList.isEmpty()) {for (String pattern : patternList) {try {DateTime dateTime = parseDate(date, pattern);if (dateTime != null) {return dateTime;}} finally {}}}String d = date.replaceAll("[^\\d]", "");String pattern = "yyyyMMdd";if (d.length() > pattern.length()) {pattern += "HH";}if (d.length() > pattern.length()) {pattern += "mm";}if (d.length() > pattern.length()) {pattern += "ss";}if (d.length() > pattern.length()) {pattern += "SSS";}try {return parseDate(d, pattern);} catch (Exception e) {throw new IllegalArgumentException("无法识别日期:" + date);}}/*** 判断字符串是否是日期** @param date* @return boolean*/public static boolean isDate(String date) {try {parseDate(date);return true;} catch (Exception e) {return false;}}public static DateTime date() {return new DateTime();}public static DateTime date(Date date) {return new DateTime(date);}public static DateTime date(int year, int month, int date,int hour, int minute, int second) {return new DateTime().year(year).month(month).day(date).hour(hour).minute(minute).second(second);}public static DateTime date(int year, int month, int date) {return date(year, month, date, 0, 0, 0);}public static class DateTime extends Date {private Calendar calendar = Calendar.getInstance();private String pattern;private WorkdayConfig workdayConfig;private DateTime() {super();calendar.setTime(this);workdayConfig = MyDateUtil.workdayConfig();}private DateTime(long time) {super(time);calendar.setTime(this);workdayConfig = MyDateUtil.workdayConfig();}private DateTime(Date date) {this(date.getTime());}private DateTime(String date) {this(MyDateUtil.parseDate(date));}@Overridepublic String toString() {return toString(StringUtils.defaultString(pattern, "yyyy-MM-dd HH:mm:ss"));}public String toString(String pattern) {return format(this, pattern);}public String toString(String pattern, Locale locale) {return format(this, pattern, locale);}public Calendar toCalendar() {return calendar;}public DateTime workdayConfig(WorkdayConfig workdayConfig) {this.workdayConfig = workdayConfig;return this;}/*** 获取日期格式*/public String getPattern() {return pattern;}/*** 设置日期格式** @param pattern*/public DateTime pattern(String pattern) {if (pattern != null && pattern.trim().equals("")) {throw new IllegalArgumentException("日期格式不能设置为空字符串");}this.pattern = pattern;return this;}/*** 设置时间** @param field 精确度* @param value 值*              <br/>{@link Calendar#SECOND}*              <br/>{@link Calendar#MINUTE}*              <br/>{@link Calendar#HOUR}*              <br/>{@link Calendar#DATE}*              <br/>{@link Calendar#MONTH}*              <br/>{@link Calendar#YEAR}* @return DateTime*/public DateTime set(int field, int value) {if (field == Calendar.MONTH) {value -= 1;}calendar.set(field, value);setTime(calendar.getTimeInMillis());return this;}/*** 设置秒** @param value* @return DateTime*/public DateTime second(int value) {return set(Calendar.SECOND, value);}/*** 设置分** @param value* @return DateTime*/public DateTime minute(int value) {return set(Calendar.MINUTE, value);}/*** 设置时** @param value* @return DateTime*/public DateTime hour(int value) {return set(Calendar.HOUR, value);}/*** 设置天** @param value* @return DateTime*/public DateTime day(int value) {return set(Calendar.DATE, value);}/*** 设置月** @param value* @return DateTime*/public DateTime month(int value) {return set(Calendar.MONTH, value);}/*** 设置年** @param value* @return DateTime*/public DateTime year(int value) {return set(Calendar.YEAR, value);}/*** 添加时间** @param field  精确度*               <br/>{@link Calendar#SECOND}*               <br/>{@link Calendar#MINUTE}*               <br/>{@link Calendar#HOUR}*               <br/>{@link Calendar#DATE}*               <br/>{@link Calendar#MONTH}*               <br/>{@link Calendar#YEAR}* @param amount 添加数* @return 添加后的时间*/public DateTime add(int field, int amount) {calendar.add(field, amount);setTime(calendar.getTimeInMillis());return this;}/*** 添加秒** @param minute* @return DateTime*/public DateTime addSecond(int minute) {return add(Calendar.SECOND, minute);}/*** 添加分钟** @param minute* @return DateTime*/public DateTime addMinute(int minute) {return add(Calendar.MINUTE, minute);}/*** 添加小时** @param hours* @return DateTime*/public DateTime addHours(int hours) {return add(Calendar.HOUR, hours);}/*** 添加天数** @param days* @return DateTime*/public DateTime addDays(int days) {return add(Calendar.DATE, days);}/*** 添加月份** @param months* @return DateTime*/public DateTime addMonths(int months) {return add(Calendar.MONTH, months);}/*** 添加年份** @param years* @return DateTime*/public DateTime addYears(int years) {return add(Calendar.YEAR, years);}/*** 比较两个时间** @param time* @param field 精确度*              <br/>{@link Calendar#SECOND}*              <br/>{@link Calendar#MINUTE}*              <br/>{@link Calendar#HOUR}*              <br/>{@link Calendar#DATE}*              <br/>{@link Calendar#MONTH}*              <br/>{@link Calendar#YEAR}* @return 两时间相差的值,结果=0:time1=time2,结果<0:time1&gt;time2,结果>0:time1>time2*/public int compare(Date time, int field) {if (time == null) {throw new IllegalArgumentException();}Calendar c = new DateTime(time).toCalendar();int accuracy = 1000;switch (field) {case Calendar.SECOND:accuracy = 1000;break;case Calendar.MINUTE:accuracy = 60 * 1000;break;case Calendar.HOUR:accuracy = 60 * 60 * 1000;break;case Calendar.DATE:accuracy = 24 * 60 * 60 * 1000;break;case Calendar.MONTH:int month = calendar.get(Calendar.MONTH) - c.get(Calendar.MONTH);int year = calendar.get(Calendar.YEAR) - c.get(Calendar.YEAR);return month + year * 12;case Calendar.YEAR:year = calendar.get(Calendar.YEAR) - c.get(Calendar.YEAR);return year;}int t1 = (int) ((calendar.getTimeInMillis() - timeZoneError) / accuracy);int t2 = (int) ((c.getTimeInMillis() - timeZoneError) / accuracy);return t1 - t2;}/*** 比较两个时间,精确到秒** @param time* @return 两时间相差的秒数*/public int compareSeconds(Date time) {return compare(time, Calendar.SECOND);}/*** 比较两个时间,精确到分钟** @param time* @return 两时间相差的分钟数*/public int compareMinutes(Date time) {return compare(time, Calendar.MINUTE);}/*** 比较两个时间,精确到小时** @param time* @return 两时间相差的小时数*/public int compareHours(Date time) {return compare(time, Calendar.HOUR);}/*** 比较两个日期,精确到天** @param date* @return 两日期相差的天数*/public int compareDays(Date date) {return compare(date, Calendar.DATE);}/*** 判断时间在指定时间之前** @param field 精确度*              <br/>{@link Calendar#SECOND}*              <br/>{@link Calendar#MINUTE}*              <br/>{@link Calendar#HOUR}*              <br/>{@link Calendar#DATE}*              <br/>{@link Calendar#MONTH}*              <br/>{@link Calendar#YEAR}* @return boolean*/public boolean before(Date date, int field) {return (compare(date, field) < 0);}/*** 判断时间在指定时间之前(精确到毫秒)** @return boolean*/@Overridepublic boolean before(Date date) {return this.before(date, Calendar.MILLISECOND);}/*** 判断时间在指定时间之前(精确到秒)** @return boolean*/public boolean beforeOfSecond(Date date) {return this.before(date, Calendar.SECOND);}/*** 判断时间在指定时间之前(精确到分)** @return boolean*/public boolean beforeOfMinute(Date date) {return this.before(date, Calendar.MINUTE);}/*** 判断时间在指定时间之前(精确到小时)** @return boolean*/public boolean beforeOfHour(Date date) {return this.before(date, Calendar.HOUR);}/*** 判断时间在指定时间之前(精确到天)** @return boolean*/public boolean beforeOfDay(Date date) {return this.before(date, Calendar.DATE);}/*** 判断时间在指定时间之后** @param field 精确度*              <br/>{@link Calendar#SECOND}*              <br/>{@link Calendar#MINUTE}*              <br/>{@link Calendar#HOUR}*              <br/>{@link Calendar#DATE}*              <br/>{@link Calendar#MONTH}*              <br/>{@link Calendar#YEAR}* @return boolean*/public boolean after(Date date, int field) {return (compare(date, field) > 0);}/*** 判断时间在指定时间之后(精确到毫秒)** @return boolean*/@Overridepublic boolean after(Date date) {return this.after(date, Calendar.MILLISECOND);}/*** 判断时间在指定时间之后(精确到秒)** @return boolean*/public boolean afterOfSecond(Date date) {return this.after(date, Calendar.SECOND);}/*** 判断时间在指定时间之后(精确到分)** @return boolean*/public boolean afterOfMinute(Date date) {return this.after(date, Calendar.MINUTE);}/*** 判断时间在指定时间之后(精确到小时)** @return boolean*/public boolean afterOfHour(Date date) {return this.after(date, Calendar.HOUR);}/*** 判断时间在指定时间之后(精确到天)** @return boolean*/public boolean afterOfDay(Date date) {return this.after(date, Calendar.DATE);}/*** 判断时间和指定时间是否是同一个时间** @param field 精确度*              <br/>{@link Calendar#SECOND}*              <br/>{@link Calendar#MINUTE}*              <br/>{@link Calendar#HOUR}*              <br/>{@link Calendar#DATE}*              <br/>{@link Calendar#MONTH}*              <br/>{@link Calendar#YEAR}* @return boolean*/public boolean same(Date date, int field) {return (compare(date, field) == 0);}/*** 判断时间和指定时间是否是一个分钟(包含年月日时)** @return boolean*/public boolean sameMinute(Date date) {return this.same(date, Calendar.MINUTE);}/*** 判断时间和指定时间是否是一个小时(包含年月日)** @return boolean*/public boolean sameHour(Date date) {return this.same(date, Calendar.HOUR);}/*** 判断时间和指定时间是否是一天** @return boolean*/public boolean sameDay(Date date) {return this.same(date, Calendar.DATE);}/*** 判断时间是否在开始时间和结束时间之间** @param startTime* @param endTime* @param field     精确度*                  <br/>{@link Calendar#SECOND}*                  <br/>{@link Calendar#MINUTE}*                  <br/>{@link Calendar#HOUR}*                  <br/>{@link Calendar#DATE}*                  <br/>{@link Calendar#MONTH}*                  <br/>{@link Calendar#YEAR}* @return boolean*/public boolean isBetween(Date startTime, Date endTime, int field) {return compare(startTime, field) >= 0 && compare(endTime, field) <= 0;}/*** 判断时间是否在开始时间和结束时间之间,精确到秒** @param startTime* @param endTime* @return boolean*/public boolean isBetweenOfSecond(Date startTime, Date endTime) {return isBetween(startTime, endTime, Calendar.SECOND);}/*** 判断日期是否在开始日期和结束时间日期之间,精确到分** @param startTime* @param endTime* @return boolean*/public boolean isBetweenOfMinute(Date startTime, Date endTime) {return isBetween(startTime, endTime, Calendar.MINUTE);}/*** 判断今天是否在开始日期和结束时间日期之间,精确到小时** @param startDate* @param endDate* @return boolean*/public boolean isBetweenOfHour(Date startDate, Date endDate) {return isBetween(startDate, endDate, Calendar.HOUR);}/*** 判断今天是否在开始日期和结束时间日期之间,精确到天** @param startDate* @param endDate* @return boolean*/public boolean isBetweenOfDay(Date startDate, Date endDate) {return isBetween(startDate, endDate, Calendar.DATE);}/*** 转到月份最后一天日期** @return DateTime*/public DateTime monthLastDate() {addMonths(1).set(Calendar.DAY_OF_MONTH, 0);return this;}/*** 转到所在星期的第一天** @return DateTime*/public DateTime weekStart() {return set(Calendar.DAY_OF_WEEK, 2);}/*** 转到所在星期的最后一天** @return DateTime*/public DateTime weekEnd() {return set(Calendar.DAY_OF_WEEK, 1).addDays(7);}/*** @see Calendar#get(int)*/public int get(int field) {return calendar.get(field);}/*** 获取年*/public int year() {return calendar.get(Calendar.YEAR);}/*** 获取月*/public int month() {return calendar.get(Calendar.MONTH) + 1;}/*** 获取日*/public int day() {return calendar.get(Calendar.DATE);}/*** 获取时*/public int hour() {return calendar.get(Calendar.HOUR);}/*** 获取分*/public int minute() {return calendar.get(Calendar.MINUTE);}/*** 获取秒*/public int second() {return calendar.get(Calendar.SECOND);}/*** 获取毫秒*/public int millisecond() {return calendar.get(Calendar.MILLISECOND);}/*** 获取日期是星期几** @return 1-7对应星期天到星期六*/public int getWeek() {return calendar.get(Calendar.DAY_OF_WEEK);}/*** 获取中文星期几** @return String*/public String getZhWeek() {return format(this, "EEE", Locale.SIMPLIFIED_CHINESE);}/*** 是否是工作日** @return boolean*/public boolean isWorkday() {return workdayConfig.isWorkday(this);}/*** 是否是节假日** @return boolean*/public boolean isHoliday() {return workdayConfig.isHoliday(this);}/*** 是否是休息日,包含节假日** @return boolean*/public boolean isDayOff() {return workdayConfig.isDayOff(this);}/*** 计算多少个工作日之后的日期** @param days* @return  DateTime*/public DateTime addWorkdays(int days) {DateTime date = MyDateUtil.date(this);if (days > 0) {for (int i = days; i > 0; i--) {if (!date.addDays(1).isWorkday()) {i++;}}} else if (days < 0) {for (int i = days; i < 0; i++) {if (!date.addDays(-1).isWorkday()) {i--;}}}return date;}/*** 计算两个日期之间有多少个工作日** @param date* @return int*/public int compareWorkdays(Date date) {int days = compareDays(date);if (days == 0) {return 0;}Date start = days > 0 ? date : this;days = Math.abs(days);int count = 0;for (int i = 1; i <= days; i++) {if (MyDateUtil.date(start).addDays(i).isWorkday()) {count++;}}return count;}}public static class WorkdayConfig implements Cloneable {/*** 补班日期*/private HashSet<String> workdays = new HashSet<>();/*** 节假日日期*/private HashSet<String> holidays = new HashSet<>();/*** 周休息日*/private ArrayList<Integer[]> weekDayOff = new ArrayList<>();/*** 月休息日*/private HashMap<Integer, Integer[]> monthDayOff = new HashMap<>();private WorkdayConfig() {weekDayOff.add(new Integer[]{Calendar.SATURDAY, Calendar.SUNDAY});}/*** 设置补班/调班日期** @param dates* @return WorkdayConfig*/public WorkdayConfig setWorkdays(List<Date> dates) {List<String> list = dates.stream().map(date -> {return MyDateUtil.date(date).toString("yyyy-MM-dd");}).collect(Collectors.toList());workdays.addAll(list);return this;}/*** 设置节假日日期** @param dates* @return WorkdayConfig*/public WorkdayConfig setHolidays(List<Date> dates) {List<String> list = dates.stream().map(date -> {return MyDateUtil.date(date).toString("yyyy-MM-dd");}).collect(Collectors.toList());holidays.addAll(list);return this;}/*** 设置周休息日,默认周六周日休息,可设置单双周** @param dayOffArray* @return WorkdayConfig*/public WorkdayConfig setWeekDayOff(Integer[]... dayOffArray) {if (dayOffArray.length > 4) {throw new IllegalArgumentException("最多设置四周的休息日");}Arrays.stream(dayOffArray).forEach(dayOffs -> {Arrays.stream(dayOffs).forEach(week -> {if (week < 1 || week > 7) {throw new IllegalArgumentException("休息日的设置范围1-7,对应星期天到星期六");}});});weekDayOff.clear();weekDayOff.addAll(Arrays.asList(dayOffArray));return this;}/*** 添加月休息日** @param month* @param days* @return WorkdayConfig*/public WorkdayConfig addMonthDayOff(int month, Integer... days) {if (month < 0 || month > 12) {throw new IllegalArgumentException("月份请设置1-12月");}DateTime date = MyDateUtil.date();date.month(month);Arrays.stream(days).forEach(day -> {if (date.day(day).month() != month) {System.out.println(date.toString());throw new IllegalArgumentException(month + "月不存在" + day + "号");}});monthDayOff.put(month, days);return this;}/*** 删除指定月休息日** @param month* @return WorkdayConfig*/public WorkdayConfig removeMonthDayOff(int month) {monthDayOff.remove(month);return this;}/*** 是否是工作日** @param date* @return boolean*/public boolean isWorkday(Date date) {DateTime dateTime = MyDateUtil.date(date);String d = dateTime.toString("yyyy-MM-dd");//是否是补班if (workdays.contains(d)) {return true;}//是否是放假if (holidays.contains(d)) {return false;}//是否是月调休if (!monthDayOff.isEmpty()) {Integer[] days = monthDayOff.get(dateTime.month());if (days != null && ArrayUtils.contains(days, dateTime.day())) {return false;}}//是否是每周的休息日if (!weekDayOff.isEmpty()) {int size = weekDayOff.size();int i = dateTime.get(Calendar.WEEK_OF_YEAR);int mo = i % size;Integer[] dayOff = weekDayOff.get(mo);return !ArrayUtils.contains(dayOff, dateTime.getWeek());}return true;}/*** 是否是节假日** @param date* @return boolean*/public boolean isHoliday(Date date) {String d = MyDateUtil.date(date).toString("yyyy-MM-dd");return holidays.contains(d);}/*** 是否是休息日,包含节假日** @param date* @return boolean*/public boolean isDayOff(Date date) {return !isWorkday(date);}@Overridepublic Object clone() throws CloneNotSupportedException {WorkdayConfig workdayConfig = (WorkdayConfig) super.clone();workdayConfig.workdays = (HashSet<String>) this.workdays.clone();workdayConfig.holidays = (HashSet<String>) this.holidays.clone();workdayConfig.weekDayOff = (ArrayList<Integer[]>) this.weekDayOff.clone();workdayConfig.monthDayOff = (HashMap<Integer, Integer[]>) this.monthDayOff.clone();return workdayConfig;}}private static void initHolidat(){List<Date> workdays= new ArrayList<>();List<Date> holidays = new ArrayList<>();holidays.add(MyDateUtil.parseDate("2022-01-01"));holidays.add(MyDateUtil.parseDate("2022-01-02"));holidays.add(MyDateUtil.parseDate("2022-01-03"));holidays.add(MyDateUtil.parseDate("2022-01-31"));holidays.add(MyDateUtil.parseDate("2022-02-01"));holidays.add(MyDateUtil.parseDate("2022-02-02"));holidays.add(MyDateUtil.parseDate("2022-02-03"));holidays.add(MyDateUtil.parseDate("2022-02-04"));holidays.add(MyDateUtil.parseDate("2022-02-05"));holidays.add(MyDateUtil.parseDate("2022-02-06"));workdays.add(MyDateUtil.parseDate("2022-01-29"));workdays.add(MyDateUtil.parseDate("2022-01-30"));holidays.add(MyDateUtil.parseDate("2022-04-03"));holidays.add(MyDateUtil.parseDate("2022-04-04"));holidays.add(MyDateUtil.parseDate("2022-04-05"));workdays.add(MyDateUtil.parseDate("2022-04-02"));holidays.add(MyDateUtil.parseDate("2022-04-30"));holidays.add(MyDateUtil.parseDate("2022-05-01"));holidays.add(MyDateUtil.parseDate("2022-05-02"));holidays.add(MyDateUtil.parseDate("2022-05-03"));holidays.add(MyDateUtil.parseDate("2022-05-04"));workdays.add(MyDateUtil.parseDate("2022-04-24"));workdays.add(MyDateUtil.parseDate("2022-05-07"));holidays.add(MyDateUtil.parseDate("2022-06-03"));holidays.add(MyDateUtil.parseDate("2022-06-04"));holidays.add(MyDateUtil.parseDate("2022-06-05"));holidays.add(MyDateUtil.parseDate("2022-09-10"));holidays.add(MyDateUtil.parseDate("2022-09-11"));holidays.add(MyDateUtil.parseDate("2022-09-12"));holidays.add(MyDateUtil.parseDate("2022-10-01"));holidays.add(MyDateUtil.parseDate("2022-10-02"));holidays.add(MyDateUtil.parseDate("2022-10-03"));holidays.add(MyDateUtil.parseDate("2022-10-04"));holidays.add(MyDateUtil.parseDate("2022-10-05"));holidays.add(MyDateUtil.parseDate("2022-10-06"));holidays.add(MyDateUtil.parseDate("2022-10-07"));workdays.add(MyDateUtil.parseDate("2022-10-08"));workdays.add(MyDateUtil.parseDate("2022-10-09"));holidays.add(MyDateUtil.parseDate("2021-01-01"));holidays.add(MyDateUtil.parseDate("2021-01-02"));holidays.add(MyDateUtil.parseDate("2021-01-03"));holidays.add(MyDateUtil.parseDate("2021-02-11"));holidays.add(MyDateUtil.parseDate("2021-02-12"));holidays.add(MyDateUtil.parseDate("2021-02-13"));holidays.add(MyDateUtil.parseDate("2021-02-14"));holidays.add(MyDateUtil.parseDate("2021-02-15"));holidays.add(MyDateUtil.parseDate("2021-02-16"));holidays.add(MyDateUtil.parseDate("2021-02-17"));holidays.add(MyDateUtil.parseDate("2021-04-03"));holidays.add(MyDateUtil.parseDate("2021-04-04"));holidays.add(MyDateUtil.parseDate("2021-04-05"));holidays.add(MyDateUtil.parseDate("2021-05-01"));holidays.add(MyDateUtil.parseDate("2021-05-02"));holidays.add(MyDateUtil.parseDate("2021-05-03"));holidays.add(MyDateUtil.parseDate("2021-05-04"));holidays.add(MyDateUtil.parseDate("2021-05-05"));holidays.add(MyDateUtil.parseDate("2021-06-12"));holidays.add(MyDateUtil.parseDate("2021-06-13"));holidays.add(MyDateUtil.parseDate("2021-06-14"));holidays.add(MyDateUtil.parseDate("2021-09-19"));holidays.add(MyDateUtil.parseDate("2021-09-21"));holidays.add(MyDateUtil.parseDate("2021-09-20"));holidays.add(MyDateUtil.parseDate("2021-10-01"));holidays.add(MyDateUtil.parseDate("2021-10-02"));holidays.add(MyDateUtil.parseDate("2021-10-03"));holidays.add(MyDateUtil.parseDate("2021-10-04"));holidays.add(MyDateUtil.parseDate("2021-10-05"));holidays.add(MyDateUtil.parseDate("2021-10-06"));holidays.add(MyDateUtil.parseDate("2021-10-07"));workdays.add(MyDateUtil.parseDate("2021-02-07"));workdays.add(MyDateUtil.parseDate("2021-02-20"));workdays.add(MyDateUtil.parseDate("2021-04-25"));workdays.add(MyDateUtil.parseDate("2021-05-08"));workdays.add(MyDateUtil.parseDate("2021-09-18"));workdays.add(MyDateUtil.parseDate("2021-09-26"));workdays.add(MyDateUtil.parseDate("2021-10-09"));holidays.add(MyDateUtil.parseDate("2020-01-01"));holidays.add(MyDateUtil.parseDate("2020-01-24"));holidays.add(MyDateUtil.parseDate("2020-01-25"));holidays.add(MyDateUtil.parseDate("2020-01-26"));holidays.add(MyDateUtil.parseDate("2020-01-27"));holidays.add(MyDateUtil.parseDate("2020-01-28"));holidays.add(MyDateUtil.parseDate("2020-01-29"));holidays.add(MyDateUtil.parseDate("2020-01-30"));holidays.add(MyDateUtil.parseDate("2020-01-31"));holidays.add(MyDateUtil.parseDate("2020-02-01"));holidays.add(MyDateUtil.parseDate("2020-02-02"));holidays.add(MyDateUtil.parseDate("2020-04-04"));holidays.add(MyDateUtil.parseDate("2020-04-05"));holidays.add(MyDateUtil.parseDate("2020-04-06"));holidays.add(MyDateUtil.parseDate("2020-05-01"));holidays.add(MyDateUtil.parseDate("2020-05-02"));holidays.add(MyDateUtil.parseDate("2020-05-03"));holidays.add(MyDateUtil.parseDate("2020-05-04"));holidays.add(MyDateUtil.parseDate("2020-05-05"));holidays.add(MyDateUtil.parseDate("2020-06-25"));holidays.add(MyDateUtil.parseDate("2020-06-26"));holidays.add(MyDateUtil.parseDate("2020-06-27"));holidays.add(MyDateUtil.parseDate("2020-10-01"));holidays.add(MyDateUtil.parseDate("2020-10-02"));holidays.add(MyDateUtil.parseDate("2020-10-03"));holidays.add(MyDateUtil.parseDate("2020-10-04"));holidays.add(MyDateUtil.parseDate("2020-10-05"));holidays.add(MyDateUtil.parseDate("2020-10-06"));holidays.add(MyDateUtil.parseDate("2020-10-07"));holidays.add(MyDateUtil.parseDate("2020-10-08"));workdays.add(MyDateUtil.parseDate("2020-01-19"));workdays.add(MyDateUtil.parseDate("2020-04-26"));workdays.add(MyDateUtil.parseDate("2020-05-09"));workdays.add(MyDateUtil.parseDate("2020-06-28"));workdays.add(MyDateUtil.parseDate("2020-09-27"));workdays.add(MyDateUtil.parseDate("2020-10-10"));holidays.add(MyDateUtil.parseDate("2019-01-01"));holidays.add(MyDateUtil.parseDate("2019-02-04"));holidays.add(MyDateUtil.parseDate("2019-02-05"));holidays.add(MyDateUtil.parseDate("2019-02-06"));holidays.add(MyDateUtil.parseDate("2019-02-07"));holidays.add(MyDateUtil.parseDate("2019-02-08"));holidays.add(MyDateUtil.parseDate("2019-02-09"));holidays.add(MyDateUtil.parseDate("2019-02-10"));holidays.add(MyDateUtil.parseDate("2019-04-05"));holidays.add(MyDateUtil.parseDate("2019-04-06"));holidays.add(MyDateUtil.parseDate("2019-04-07"));holidays.add(MyDateUtil.parseDate("2019-05-01"));holidays.add(MyDateUtil.parseDate("2019-05-02"));holidays.add(MyDateUtil.parseDate("2019-05-03"));holidays.add(MyDateUtil.parseDate("2019-05-04"));holidays.add(MyDateUtil.parseDate("2019-06-07"));holidays.add(MyDateUtil.parseDate("2019-06-08"));holidays.add(MyDateUtil.parseDate("2019-06-09"));holidays.add(MyDateUtil.parseDate("2019-09-13"));holidays.add(MyDateUtil.parseDate("2019-09-14"));holidays.add(MyDateUtil.parseDate("2019-09-15"));holidays.add(MyDateUtil.parseDate("2019-10-01"));holidays.add(MyDateUtil.parseDate("2019-10-02"));holidays.add(MyDateUtil.parseDate("2019-10-03"));holidays.add(MyDateUtil.parseDate("2019-10-04"));holidays.add(MyDateUtil.parseDate("2019-10-05"));holidays.add(MyDateUtil.parseDate("2019-10-06"));holidays.add(MyDateUtil.parseDate("2019-10-07"));workdays.add(MyDateUtil.parseDate("2019-02-02"));workdays.add(MyDateUtil.parseDate("2019-02-03"));workdays.add(MyDateUtil.parseDate("2019-04-28"));workdays.add(MyDateUtil.parseDate("2019-05-05"));workdays.add(MyDateUtil.parseDate("2019-09-29"));workdays.add(MyDateUtil.parseDate("2019-10-12"));holidays.add(MyDateUtil.parseDate("2018-01-01"));holidays.add(MyDateUtil.parseDate("2018-02-15"));holidays.add(MyDateUtil.parseDate("2018-02-16"));holidays.add(MyDateUtil.parseDate("2018-02-17"));holidays.add(MyDateUtil.parseDate("2018-02-18"));holidays.add(MyDateUtil.parseDate("2018-02-19"));holidays.add(MyDateUtil.parseDate("2018-02-20"));holidays.add(MyDateUtil.parseDate("2018-02-21"));holidays.add(MyDateUtil.parseDate("2018-04-05"));holidays.add(MyDateUtil.parseDate("2018-04-06"));holidays.add(MyDateUtil.parseDate("2018-04-07"));holidays.add(MyDateUtil.parseDate("2018-04-29"));holidays.add(MyDateUtil.parseDate("2018-04-30"));holidays.add(MyDateUtil.parseDate("2018-05-01"));holidays.add(MyDateUtil.parseDate("2018-06-16"));holidays.add(MyDateUtil.parseDate("2018-06-17"));holidays.add(MyDateUtil.parseDate("2018-06-18"));holidays.add(MyDateUtil.parseDate("2018-09-22"));holidays.add(MyDateUtil.parseDate("2018-09-23"));holidays.add(MyDateUtil.parseDate("2018-09-24"));holidays.add(MyDateUtil.parseDate("2018-10-01"));holidays.add(MyDateUtil.parseDate("2018-10-02"));holidays.add(MyDateUtil.parseDate("2018-10-03"));holidays.add(MyDateUtil.parseDate("2018-10-04"));holidays.add(MyDateUtil.parseDate("2018-10-05"));holidays.add(MyDateUtil.parseDate("2018-10-06"));holidays.add(MyDateUtil.parseDate("2018-10-07"));workdays.add(MyDateUtil.parseDate("2018-02-11"));workdays.add(MyDateUtil.parseDate("2018-02-24"));workdays.add(MyDateUtil.parseDate("2018-04-08"));workdays.add(MyDateUtil.parseDate("2018-04-28"));workdays.add(MyDateUtil.parseDate("2018-09-29"));workdays.add(MyDateUtil.parseDate("2018-09-30"));holidays.add(MyDateUtil.parseDate("2017-01-01"));holidays.add(MyDateUtil.parseDate("2017-01-02"));holidays.add(MyDateUtil.parseDate("2017-01-27"));holidays.add(MyDateUtil.parseDate("2017-01-28"));holidays.add(MyDateUtil.parseDate("2017-01-29"));holidays.add(MyDateUtil.parseDate("2017-01-30"));holidays.add(MyDateUtil.parseDate("2017-01-31"));holidays.add(MyDateUtil.parseDate("2017-02-01"));holidays.add(MyDateUtil.parseDate("2017-02-02"));holidays.add(MyDateUtil.parseDate("2017-04-02"));holidays.add(MyDateUtil.parseDate("2017-04-03"));holidays.add(MyDateUtil.parseDate("2017-04-04"));holidays.add(MyDateUtil.parseDate("2017-04-29"));holidays.add(MyDateUtil.parseDate("2017-04-30"));holidays.add(MyDateUtil.parseDate("2017-05-01"));holidays.add(MyDateUtil.parseDate("2017-05-28"));holidays.add(MyDateUtil.parseDate("2017-05-29"));holidays.add(MyDateUtil.parseDate("2017-05-30"));holidays.add(MyDateUtil.parseDate("2017-10-01"));holidays.add(MyDateUtil.parseDate("2017-10-02"));holidays.add(MyDateUtil.parseDate("2017-10-03"));holidays.add(MyDateUtil.parseDate("2017-10-04"));holidays.add(MyDateUtil.parseDate("2017-10-05"));holidays.add(MyDateUtil.parseDate("2017-10-06"));holidays.add(MyDateUtil.parseDate("2017-10-07"));holidays.add(MyDateUtil.parseDate("2017-10-08"));workdays.add(MyDateUtil.parseDate("2017-01-22"));workdays.add(MyDateUtil.parseDate("2017-02-04"));workdays.add(MyDateUtil.parseDate("2017-04-01"));workdays.add(MyDateUtil.parseDate("2017-05-27"));workdays.add(MyDateUtil.parseDate("2017-09-30"));holidays.add(MyDateUtil.parseDate("2016-01-01"));holidays.add(MyDateUtil.parseDate("2016-01-02"));holidays.add(MyDateUtil.parseDate("2016-01-03"));holidays.add(MyDateUtil.parseDate("2016-02-07"));holidays.add(MyDateUtil.parseDate("2016-02-08"));holidays.add(MyDateUtil.parseDate("2016-02-09"));holidays.add(MyDateUtil.parseDate("2016-02-10"));holidays.add(MyDateUtil.parseDate("2016-02-11"));holidays.add(MyDateUtil.parseDate("2016-02-12"));holidays.add(MyDateUtil.parseDate("2016-02-13"));holidays.add(MyDateUtil.parseDate("2016-04-02"));holidays.add(MyDateUtil.parseDate("2016-04-03"));holidays.add(MyDateUtil.parseDate("2016-04-04"));holidays.add(MyDateUtil.parseDate("2016-04-30"));holidays.add(MyDateUtil.parseDate("2016-05-01"));holidays.add(MyDateUtil.parseDate("2016-05-02"));holidays.add(MyDateUtil.parseDate("2016-06-09"));holidays.add(MyDateUtil.parseDate("2016-06-10"));holidays.add(MyDateUtil.parseDate("2016-06-11"));holidays.add(MyDateUtil.parseDate("2016-09-15"));holidays.add(MyDateUtil.parseDate("2016-09-16"));holidays.add(MyDateUtil.parseDate("2016-09-17"));holidays.add(MyDateUtil.parseDate("2016-10-01"));holidays.add(MyDateUtil.parseDate("2016-10-02"));holidays.add(MyDateUtil.parseDate("2016-10-03"));holidays.add(MyDateUtil.parseDate("2016-10-04"));holidays.add(MyDateUtil.parseDate("2016-10-05"));holidays.add(MyDateUtil.parseDate("2016-10-06"));holidays.add(MyDateUtil.parseDate("2016-10-07"));workdays.add(MyDateUtil.parseDate("2016-02-06"));workdays.add(MyDateUtil.parseDate("2016-02-14"));workdays.add(MyDateUtil.parseDate("2016-02-28"));workdays.add(MyDateUtil.parseDate("2016-06-12"));workdays.add(MyDateUtil.parseDate("2016-09-18"));workdays.add(MyDateUtil.parseDate("2016-10-08"));workdays.add(MyDateUtil.parseDate("2016-10-09"));holidays.add(MyDateUtil.parseDate("2015-01-01"));holidays.add(MyDateUtil.parseDate("2015-01-02"));holidays.add(MyDateUtil.parseDate("2015-01-03"));holidays.add(MyDateUtil.parseDate("2015-02-18"));holidays.add(MyDateUtil.parseDate("2015-02-19"));holidays.add(MyDateUtil.parseDate("2015-02-20"));holidays.add(MyDateUtil.parseDate("2015-02-21"));holidays.add(MyDateUtil.parseDate("2015-02-22"));holidays.add(MyDateUtil.parseDate("2015-02-23"));holidays.add(MyDateUtil.parseDate("2015-02-24"));holidays.add(MyDateUtil.parseDate("2015-04-04"));holidays.add(MyDateUtil.parseDate("2015-04-05"));holidays.add(MyDateUtil.parseDate("2015-04-06"));holidays.add(MyDateUtil.parseDate("2015-05-01"));holidays.add(MyDateUtil.parseDate("2015-05-02"));holidays.add(MyDateUtil.parseDate("2015-05-03"));holidays.add(MyDateUtil.parseDate("2015-06-20"));holidays.add(MyDateUtil.parseDate("2015-06-21"));holidays.add(MyDateUtil.parseDate("2015-06-22"));holidays.add(MyDateUtil.parseDate("2015-09-03"));holidays.add(MyDateUtil.parseDate("2015-09-04"));holidays.add(MyDateUtil.parseDate("2015-09-05"));holidays.add(MyDateUtil.parseDate("2015-09-26"));holidays.add(MyDateUtil.parseDate("2015-09-27"));holidays.add(MyDateUtil.parseDate("2015-10-01"));holidays.add(MyDateUtil.parseDate("2015-10-02"));holidays.add(MyDateUtil.parseDate("2015-10-03"));holidays.add(MyDateUtil.parseDate("2015-10-04"));holidays.add(MyDateUtil.parseDate("2015-10-05"));holidays.add(MyDateUtil.parseDate("2015-10-06"));holidays.add(MyDateUtil.parseDate("2015-10-07"));workdays.add(MyDateUtil.parseDate("2015-01-04"));workdays.add(MyDateUtil.parseDate("2015-02-15"));workdays.add(MyDateUtil.parseDate("2015-02-28"));workdays.add(MyDateUtil.parseDate("2015-09-06"));workdays.add(MyDateUtil.parseDate("2015-10-10"));MyDateUtil.workdayConfig().setWorkdays(workdays);MyDateUtil.workdayConfig().setHolidays(holidays);}
}

【Java获取国家法定节假日三种工具类其一】相关推荐

  1. 【Java获取国家法定节假日三种工具类其三】

    使用GitHub开源Api调用获取国家法定节假日 public class HolidayUtils {/*** 请求第三方接口的方法** @param url 请求的url* @return*/pu ...

  2. 【Java获取国家法定节假日三种工具类其二】

    使用实体类返回更加清晰 public class Holiday {private String day;private String name;private boolean work;privat ...

  3. java获取国家法定节假日(不依赖API)

    java获取国家法定节假日, 由此可获取每月第一个工作日和最后一个工作日 (不依赖API,主要是因为API接口不可靠或计费,此工具依赖国务院发布的节假日基础信息进行解析) 本工具仅供参考学习.各类数据 ...

  4. java获取国家法定节假日和周末

    java获取国家法定节假日和周末 package com.lxh.config.utils;import com.alibaba.fastjson.JSONObject; import okhttp3 ...

  5. 【现成工具】java获取国家法定节假日包含指定月份节假日和周末

    首先感谢大佬提供的免费API接口调用,http://timor.tech/api/holiday .该API工具类可以获取到国家法定节假日,此节假日为严格按照国家要求的双休和法定节假日并且包含节假日的 ...

  6. java 获取当前时间的三种方法是什么

    本文主要介绍java获取当前时间的三种方法.这篇文章很详细,有一定的参考价值.有需要的朋友可以参考一下. 总结一些java中获取当前时间的方法. System.currentTimeMillis() ...

  7. java获取反射机制的三种方式

    更多免费教学文章请关注这里 java 获取反射常使用的三种方式: 1.通过new对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制 通过Object类的getClass方法来获取 使 ...

  8. JAVA获取当前时间的三种方法

    1.java.util.Date day=new Date(); SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:s ...

  9. java 获取随机数字的三种方法

    1 //方法1 (数据类型) 2 //(最小值+Math.random()*(最大值-最小值+1)) 3 // 例: 4 (int)(1+Math.random()*(10-1+1)) //从1到10 ...

最新文章

  1. hadoop运维必备命令
  2. jQuery Event.stopPropagation() 函数详解
  3. python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...
  4. jasperreports_JasperReports:棘手的部分
  5. 3D建模吃香到底是真是假?
  6. CHSBO2018游记
  7. 为了车票而奔波着.....
  8. 二维码生成代码(转载)
  9. 转一个国外程序员辞职自己做广告应用的经历贴
  10. Visual Attention Network
  11. 如何提高阿里云商标注册的成功率?(经验分享)
  12. ora12514问题怎么解决linux,ORA-12514问题解决
  13. 雅加达出差(8月24日到25日)
  14. filtering_audio.c/filtering_video.c 解读
  15. 基于matlab山脊线,基于Matlab的标记分水岭分割算法
  16. 服务器无限刷石机推荐,【红石技巧】-世界上最快的刷石机
  17. 我对M4A文件格式的理解
  18. python 机器学习——特征筛选实现
  19. Python - 定时自动获取 Bing 首页壁纸
  20. 衡水二中2021清华北大高考成绩查询,此中学与衡水中学齐名,高考101人考上清华北大,很多人却不知道...

热门文章

  1. 2022UI自动化测试框架搭建 —— yaml文件管理定位元素
  2. Mybaits-Plus Invalid bound statement (not found) 问题
  3. 华为应用市场AGC研习社游戏课程上新,助力游戏开发者高效分发获量
  4. 【python第3课】顺序、循环、分支
  5. 高防服务器如何防御?
  6. Matlab中的Smith 预估器
  7. 通过python刷android步数,使用 Python 修改微信/QQ/支付宝运动步数
  8. [zz]2007年的152条牛人经典BT语录,强烈推荐!
  9. 移动终端应用开发上机3组件通信与广播
  10. css使用box-shadow实现泛光效果