1.说明:

获取n个工作日后的日期(包含法定节假日、双休日、节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班。(也可写在配置文件中读取)

2.工具类代码

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.List;

/**

* 用于查询n个工作日(包含法定节假日、双休日、调休)后的日期

* @author ywh

* @version 创建时间:2019年4月24日 下午5:50:29

*/

public class HolidayUtils {

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

/**

* 用于判断n个工作日(排除节假日、周六日包含节后补班数据)后的日期

*

* @author ywh

* @version 创建时间:2019年4月24日 上午11:24:58

* @param list 节假日数据源

* @param weekDayList 节后补班数据源

* @param today 计算开始时间

* @param num 多少个工作日 根据需要自行安排

* @return

* @throws ParseException

*/

@SuppressWarnings("deprecation")

public static Date getScheduleActiveDate(List list,List weekDayList, Date today,int num) throws ParseException {

String today1 = DateUtils.parseDate(today, "yyyy-MM-dd");

Date tomorrow = null;

int delay = 1;

while(delay <= num){

tomorrow = getTomorrow(today);

//当前日期+1即tomorrow,判断是否是节假日,同时要判断是否是周末,都不是则将scheduleActiveDate日期+1,直到循环num次即可------不是节假日不是周末并且不是补班

if((!isWeekend(sdf.format(tomorrow)) && !isHoliday(sdf.format(tomorrow),list)) || isWorkWeekDay(sdf.format(tomorrow),weekDayList)){

if(isWorkWeekDay(sdf.format(tomorrow),weekDayList)){

System.out.println(sdf.format(tomorrow) + "::是节假日调休补班");

}else{

System.out.println(sdf.format(tomorrow) + "::是正常工作日");

}

delay++;

today = tomorrow;

}else if (isHoliday(sdf.format(tomorrow),list)){

// tomorrow = getTomorrow(tomorrow);

today = tomorrow;

System.out.println(sdf.format(tomorrow) + "::是节假日");

}else if(isWeekend(sdf.format(tomorrow))){//是周六日并且不是节后补班

if(!isWorkWeekDay(sdf.format(tomorrow),weekDayList)){

today = tomorrow;

System.out.println(sdf.format(tomorrow) + "::是休息日");

}

}

}

System.out.println(today1+"后"+num+"个工作日后,日期为::" + sdf.format(today));

return today;

}

/**

* 获取明天的日期

*

* @author ywh

* @version 创建时间:2019年4月23日 下午5:18:44

*/

public static Date getTomorrow(Date date){

Calendar calendar = Calendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.DAY_OF_MONTH, +1);

date = calendar.getTime();

return date;

}

/**

* 判断是否是weekend

*

* @author ywh

* @version 创建时间:2019年4月23日 下午5:19:27

*/

public static boolean isWeekend(String sdate) throws ParseException {

Date date = sdf.parse(sdate);

Calendar cal = Calendar.getInstance();

cal.setTime(date);

if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){

return true;

} else{

return false;

}

}

/**

* 判断是否是holiday

*

* @author ywh

* @version 创建时间:2019年4月23日 下午5:19:42

*/

public static boolean isHoliday(String sdate, List list) throws ParseException {

if(list.size() > 0){

for(int i = 0; i < list.size(); i++){

if(sdate.equals(list.get(i))){

return true;

}

}

}

return false;

}

/**

* 判断是否是补班

*

* @author ywh

* @version 创建时间:2019年4月23日 下午5:19:54

*/

public static boolean isWorkWeekDay(String sdate, List list) throws ParseException {

if(list.size() > 0){

for(int i = 0; i < list.size(); i++){

if(sdate.equals(list.get(i))){

return true;

}

}

}

return false;

}

/**

* 把日期格式化成字符串

* @param date

* @param format 例: yyyy-MM-dd

* @return

*/

public static String parseDate(Date date, String format) {

SimpleDateFormat formater = new SimpleDateFormat(format);

String dateString;

dateString = formater.format(date);

return dateString;

}

}

3.测试调用

publicString holiday(String date){

Date today1= newDate();int num = 10;// List holidayList = holidayService.queryAllHoliday("0");//查询出法定节假日list

List weekDayList =holidayService.queryAllHoliday("1");//查询节假日调休补班list

List hoList= new ArrayList();//节假日数据源

List weList = new ArrayList();//节后节前数据源

for(Holiday holiday : holidayList) {

hoList.add(holiday.getDate());

}for(Holiday holiday : weekDayList) {

weList.add(holiday.getDate());

}try{

Date date111=HolidayUtils.getScheduleActiveDate(hoList,weList,today1,num);

System.out.println(HolidayUtils.parseDate(date111,"yyyy-MM-dd"));

}catch(ParseException e) {

e.printStackTrace();

}return "";

}

4.sql脚本

DROP TABLE IF EXISTS `holiday`;

CREATE TABLE `holiday` (

`GUID` varchar(36) COLLATE utf8_bin NOT NULL,

`DATE` varchar(10) COLLATE utf8_bin DEFAULT NULL,

`TYPE` varchar(1) COLLATE utf8_bin DEFAULT NULL COMMENT '0:法定节假日;1 节假日调休补班(如某个节假日前后周六日上班的情况)',

PRIMARY KEY (`GUID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='此表需每年根据法定节假日具体时间更新一次';-- ----------------------------

--Records of holiday-- ----------------------------INSERT INTO `holiday` VALUES ('1', '2019-05-01', '0');

INSERT INTO `holiday` VALUES ('10', '2019-09-15', '0');

INSERT INTO `holiday` VALUES ('11', '2019-10-01', '0');

INSERT INTO `holiday` VALUES ('12', '2019-10-02', '0');

INSERT INTO `holiday` VALUES ('13', '2019-10-03', '0');

INSERT INTO `holiday` VALUES ('14', '2019-10-04', '0');

INSERT INTO `holiday` VALUES ('15', '2019-10-05', '0');

INSERT INTO `holiday` VALUES ('16', '2019-10-06', '0');

INSERT INTO `holiday` VALUES ('17', '2019-10-07', '0');

INSERT INTO `holiday` VALUES ('18', '2019-04-28', '1');

INSERT INTO `holiday` VALUES ('19', '2019-05-05', '1');

INSERT INTO `holiday` VALUES ('2', '2019-05-02', '0');

INSERT INTO `holiday` VALUES ('20', '2019-09-29', '1');

INSERT INTO `holiday` VALUES ('21', '2019-10-12', '1');

INSERT INTO `holiday` VALUES ('3', '2019-05-03', '0');

INSERT INTO `holiday` VALUES ('4', '2019-05-04', '0');

INSERT INTO `holiday` VALUES ('5', '2019-06-07', '0');

INSERT INTO `holiday` VALUES ('6', '2019-06-08', '0');

INSERT INTO `holiday` VALUES ('7', '2019-06-09', '0');

INSERT INTO `holiday` VALUES ('8', '2019-09-13', '0');

INSERT INTO `holiday` VALUES ('9', '2019-09-14', '0');

java 获取假期时间_java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...相关推荐

  1. java 控制台输出时间_Java获取时间打印到控制台代码实例

    这篇文章主要介绍了Java获取时间打印到控制台代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 面试时有一道面试题:要求获取当时时间,并像电子 ...

  2. java 当前utc时间_Java获取UTC时间的方法详解

    本文实例讲述了java获取utc时间的方法.分享给大家供大家参考,具体如下: 取得本地时间: java.util.calendar cal = java.util.calendar.getinstan ...

  3. java从数据库中获取当前时间_JAVA获取当前系统时间(包含时分秒)插入数据库...

    网上找到好多方法,但是貌似都是不准确,当我看到这个我内牛满面 Timestamp d= new Timestamp(System.currentTimeMillis()); //获取系统时间直接转换成 ...

  4. java 获取当前日期时间_Java 获取当前日期时间

    Java 当前日期时间教程介绍了各种 Java 类,以获取 Java 中的当前日期时间. 有几种方法可以获取 Java 中的当前日期和时间. Java 程序员可以使用 Java 8(java.time ...

  5. web java获取当前时间_Java 获取当前系统时间的三种方法

    准备工作: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; 方式一: /** ...

  6. java 获取法定节假日+周末+排除补班

    1.代码 package com.example.demo.controller; import org.springframework.web.client.RestTemplate; import ...

  7. java读取打包时间_Java获取响应的日期时间,这样写是否合理?

    在java中,这样获取响应的时间是否合理? /** * 获取当前日期指定几个月前的日期 * @return */ public static Date getNMonthBefore(int amou ...

  8. java joda 获取utc时间_Java获取时间与系统时间相差8小时终极解决方案

    0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...

  9. java获取网络时间_java获取网络当前时间

    展开全部 如果你要获取的是Internet时间,可以使用NTP服务. NTP概念简介 Network Time Protocol(NTP)是62616964757a686964616fe4b893e5 ...

最新文章

  1. 存储过程中返回结果集
  2. 搭配飞行员 dinic
  3. 各种页面刷新代码大全,asp/javascript刷新页面代码
  4. 压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包
  5. python重要函数eval
  6. 如何求欧拉函数~转载
  7. Docker容器的自动化监控实现
  8. .NET跨平台实践:用C#开发Linux守护进程
  9. vmware创建虚拟机并安装centos7系统
  10. python 安装pandas 权限不够_详解Python学习之安装pandas
  11. vue 多页面应用例子_【微服务】137:Vue之生命周期钩子
  12. 基础网络函数介绍及其Cpp实例(C++)
  13. Modelsim SE 下载安装、注册详细教程
  14. 计算机专业毕业论文参考文献(精选115个最新)
  15. OpenWrt路由器设置万能中继及如何永久修改MAC地址
  16. 2019深圳入户攻略
  17. 教你怎样混社会[转]
  18. 美通企业日报 | 茅台在海外市场供不应求;默克广东创新中心将正式投入使用...
  19. android 视频相册,安卓11版本保存视频到相册,提示保存成功,相册里没有视频...
  20. 关于鸿蒙系统传统文化的作文,【热门】传统文化作文汇编6篇

热门文章

  1. elasticsearch中DSL之Span queries
  2. 蒙古族传统圣火祭祀点燃新年祈福之旅
  3. Android 音乐频谱实现
  4. 北京指标是啥意思,通过什么方式获得?
  5. final finally finalized的区别?
  6. ajax onreadystatechange属性
  7. 解决System limit for number of file watchers reached
  8. Qt Quick 3D学习:使用鼠标键盘控制节点位置和方向
  9. unity中草实现举例
  10. 【Bleak】七、使能通知