/*** <p>Title: main </P>* <p>Description: TODO </P>* @param args* return void    返回类型* throws* date 2014-11-24 上午09:11:47*/
public static void main(String[] args) {try {List<String> dateStringList=new ArrayList<>();dateStringList.add("2018-10-01");dateStringList.add("2018-10-02");dateStringList.add("2018-10-03");dateStringList.add("2018-10-04");dateStringList.add("2018-10-05");dateStringList.add("2018-10-06");dateStringList.add("2018-10-07");List<String> specifiedDateList=new ArrayList<>();specifiedDateList.add("2018-09-29");specifiedDateList.add("2018-09-30");initHolidayList(dateStringList,specifiedDateList);DateFormat df = new SimpleDateFormat("yyyy-MM-dd");Calendar ca = Calendar.getInstance();Date d = df.parse("2018-9-27");ca.setTime(d);//设置当前时间Test1 ct = new Test1();String c = ct.addDateByWorkDay(ca,5);System.out.println(c);} catch ( Exception e) {// TODO: handle exceptione.printStackTrace();}}private static List<Calendar> holidayList = new ArrayList<Calendar>();  //节假日列表
private static List<Calendar> workList = new ArrayList<Calendar>();  //指定工作日期/**** <p>Title: addDateByWorkDay </P>* <p>Description: TODO  计算相加day天,并且排除节假日和周末后的日期</P>* @param calendar  当前的日期* @param day  相加天数* @return* return Calendar    返回类型   返回相加day天,并且排除节假日和周末后的日期* throws* date 2014-11-24 上午10:32:55*/
public static String addDateByWorkDay(Calendar calendar,int day){try {for (int i = 0; i < day; i++) {calendar.add(Calendar.DAY_OF_MONTH, 1);if(checkHoliday(calendar)){i--;}}} catch (Exception e) {e.printStackTrace();}DateFormat df = new SimpleDateFormat("yyyy-MM-dd");return  df.format(calendar.getTime());
}/**** <p>Title: checkHoliday </P>* <p>Description: TODO 验证日期是否是节假日</P>* @param calendar  传入需要验证的日期* @return* return boolean    返回类型  返回true是节假日,返回false不是节假日* throws* date 2014-11-24 上午10:13:07*/
public static boolean checkHoliday(Calendar calendar) throws Exception{//判断日期是否是指定工作日for (Calendar ca : workList) {if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){return false;}}//判断日期是否是周六周日if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ||calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){return true;}//判断日期是否是节假日for (Calendar ca : holidayList) {if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){return true;}}return false;
}/**** <p>Title: initHolidayList </P>* <p>Description: TODO  把所有节假日放入list,验证前要先执行这个方法</P>* @param date  从数据库查 查出来的格式2014-05-09* return void    返回类型* throws* date 2014-11-24 上午10:11:35*/
public static  void initHolidayList(List<String> holidayDateList,List<String> specifiedDateList) {for (String string : holidayDateList) {String[] da = string.split("-");Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));calendar.set(Calendar.MONTH, Integer.valueOf(da[1]) - 1);// 月份比正常小1,0代表一月calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));holidayList.add(calendar);}for (String string : specifiedDateList) {String[] da = string.split("-");Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));calendar.set(Calendar.MONTH, Integer.valueOf(da[1]) - 1);// 月份比正常小1,0代表一月calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));workList.add(calendar);}
}
initHolidayList(List<String> holidayDateList,List<String> specifiedDateList)
我在这个方法里面加了一个指定工作日参数把网上别人提供的优化了一下,节假日和指定工作日要新建一个数据表,去维护信息。

转载地址:https://blog.csdn.net/u011789653/article/details/41541555#commentBox

java 计算工作日排除法定假日以及周末,增加指定工作日相关推荐

  1. java 算出下一个工作日,Java:计算一个日期加下指定工作日数(排除周六周日和一系列节日)...

    Java:计算一个日期加上指定工作日数(排除周六周日和一系列节日) 工作时遇到的,随便写了个,欢迎高手点评: 核心代码: package www.sjjjob.com.date; import jav ...

  2. java 判断日期是周末_java计算两个日期之前的天数实例(排除节假日和周末)

    如题所说,计算两个日期之前的天数,排除节假日和周末.这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天. 不够很坑的是每个日期都要查询数据库,感觉很浪费时间. 原 ...

  3. Java计算时间区间内工作日天数

    Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...

  4. 智能跳过节假日算法java_java计算两个日期之前的天数实例(排除节假日和周末)...

    java计算两个日期之前的天数实例(排除节假日和周末) 发布时间:2020-09-02 23:07:01 来源:脚本之家 阅读:108 作者:jingxian 如题所说,计算两个日期之前的天数,排除节 ...

  5. java计算时间的秒数差,去掉周末和节假日

    java计算时间的秒数差,去掉周末和节假日 如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理 ...

  6. Java 计算工作日,休假,调休,调班等

    /*** 用于判断n个工作日(排除节假日.周六日包含节后补班数据)后的日期* @param list 节假日数据源* @param weekDayList 节后补班数据源* @param today ...

  7. 智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末

    如题所说,计算两个日期之前的天数,排除节假日和周末.这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天. 不够很坑的是每个日期都要查询数据库,感觉很浪费时间. 原 ...

  8. java计算工作日方法

    java计算工作日,实测有效 public static Date getDate(Date currentDate, int days){Calendar calendar= Calendar.ge ...

  9. java计算时间差距_硬计算和软计算之间的差异

    java计算时间差距 什么是计算? (What is Computing?) The process of accomplishing a particular task with the help ...

最新文章

  1. [shell实例]——用脚本实现向多台服务器批量复制文件(nmap、scp)
  2. 成功解决AttributeError: module ‘tensorflow‘ has no attribute ‘get_variable‘
  3. 海量数据选取重复次数最多的n个
  4. 熬过了互联网“寒冬”,接下来的金三银四你该怎么面试进BAT?
  5. Spring开启@Async异步方法(javaconfig配置)
  6. Printk与sched_clock_init的一点分析
  7. UTC时间、GMT时间、本地时间、Unix时间戳
  8. activemq安全设置 设置admin的用户名和密码
  9. element.style内联样式修改
  10. memset 和 memcpy 和 memcmp (strncmp遇到\0会中断)
  11. mysql8.0 安装_MySQL8.0安装步骤
  12. CentOS7.6安装WirёGuαrd(二)
  13. [2019杭电多校第六场][hdu6635]Nonsense Time
  14. 星星评价控件android开发_Android自定义View,评分星星控件(RatingBar)
  15. 数据结构详解之向量vector
  16. java 类修饰符 作用域_java的4种内部类,你真的了解了吗?
  17. TextCNN文本分类实践
  18. java动态表头_easyPOI动态表头
  19. Multithreading and Synchronization
  20. android 第三方 im,Android基于环信SDK开发IM即时聊天

热门文章

  1. 【三维视觉】【深度学习】ubuntu18.04下PointNet官方代码Pytorch实现
  2. 我的周刊(第082期)
  3. 如何删掉计算机里的网络驱动器,电脑问题电脑目录多2个cd驱动器,怎么删除 – 手机爱问...
  4. 链接与加载-NJU-JYY
  5. 【程序设计】文件的打包与压缩
  6. AccessDenied You have no right to access this object because of bucket acl.
  7. CISSP vs CISA,该选哪个?
  8. 紫微生年忌看你运气走势!
  9. 绘制股票价格图 《Python数据可视化》的p131 python爬取雅虎财经股票交易数据
  10. “网抑云”,缺的是梗吗?