1.说明:java

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

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 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...

    1.说明: 获取n个工作日后的日期(包含法定节假日.双休日.节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取) 2.工具类代码 import java.tex ...

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

    1.说明: 获取n个工作日后的日期(包含法定节假日.双休日.节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取) 2.工具类代码 import java.tex ...

  3. java节假日 调休的代码,java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...

    1.说明: 获取n个工作日后的日期(包含法定节假日.双休日.节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取). 2.工具类代码 /** * @author: ...

  4. java 节假日_Java获取法定节假日并解析

    1.接口调用:http://https://www.198bona.com 2.具体代码(红色部分为主要解析代码): /** * 日历导入根工具 */ public class CalenderUti ...

  5. java获得当月法定工作日_java获取当月的工作日

    在这个记录一下,记录java获取某个月的工作日的代码,方便以后查看! import java.util.ArrayList; import java.util.Calendar; import jav ...

  6. java 取字段_java – 获取字段的名称

    在 Java中可以从实际字段获取字符串中的字段名称吗?喜欢: public class mod { @ItemID public static ItemLinkTool linkTool; publi ...

  7. java随机数转换_Java获取随机数的3种方法(转)

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  8. java处理最后一周_Java获取某年某周的最后一天

    package test; import java.text.SimpleDateFormat; import java.util.Calendar; /** * ClassName: LastDay ...

  9. java 绝对路径_java 获取绝对路径

    1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...

最新文章

  1. 哈利波特 pdf_干货!哈利波特英文原版pdf免费领,(含音频)词汇量大于新概念!...
  2. Angular2响应式表单
  3. 实战SSM_O2O商铺_20【商铺编辑】View层开发
  4. 经济学相关资料20170924.词袋.books
  5. C/C++劫持技术(函数劫持、dll注入、动态库注入、HOOK)
  6. spring4.x(10)---依赖注入-构造方法注入
  7. mac下antlr4命令使用
  8. Sencha touch 开发系列:容器组件:tabpanel,carousels
  9. Android学习笔记(一)——Android应用的界面编程
  10. java里程碑之泛型--使用泛型
  11. 重编译 microsip 和 pjsip 支持 mp3 录音
  12. 解决:teamviewer作为个人用途免费,但仅可使用数量的设备上
  13. python实现飞机大战源代码+素材+项目分析
  14. 医院挂号小程序,预约挂号小程序,微信小程序医院预约挂号系统毕业设计作品
  15. INA240三相无刷电机电流采样实例(arduino)
  16. html网页设计板报,html5做一个黑板报页面
  17. XPS如何在线转Word格式
  18. MATLAB模糊控制工具箱的使用及常见问题处理
  19. QT-QML制作登录界面
  20. 台式计算机功率一般多少瓦,笔记本功率一般是多少瓦的,实际功率又是多少?...

热门文章

  1. 用计算机打生僻字的歌,学子写抖音最火《生僻字》歌,70多个生僻字,懵了~
  2. androidstudio引用本地maven_android studio 之dependence添加依赖maven仓库中的项目出错
  3. Windows内存清理----其实是没必要的
  4. fluent-mybatis初体验
  5. DFS(深度优先搜索算法)入门
  6. 解决this application failed to start
  7. SQL 存储过程 超市小票打印
  8. 未接响铃1秒是什么意思_空调能耗等级是什么意思 家用有必要买1级空调吗 看了它就明白了...
  9. EC20 AT指令 列举
  10. NIST的安全内容自动化协议(SCAP)以及SCAP中文社区简介