工作中遇到的一个小问题,需要获取指定天数的工作日后的日期,比如:3个工作日后的日期。
从网上没有找到完全符合要求的例子,只好自己写一个,在这里记录一下。
package com.linkcld.ecms.common.util; import java.text.*; import java.util.*; / * 获取指定数量个工作日后的日期。 * 如:获取20个工作日后的日期。 * * @author Administrator * */ public class GetWorkDaysByNumber { // 定义当年的节假日日期数组 private static String[] holidays = { "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 static String[] workWeekends = { "2018-02-11", "2018-02-24", "2018-04-08", "2018-04-28", "2018-09-29", "2018-09-30", }; public static void main(String[] args) { getDate(15); } public static Date getDate(int daysNum) { List<String> holidaysList = Arrays.asList(holidays); List<String> workWeekendsList = Arrays.asList(workWeekends); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); int num = 0; while (num != daysNum) { cal.add(Calendar.DAY_OF_YEAR, 1); String dateStr = sdf.format(cal.getTime()); if (holidaysList.contains(dateStr)) { // 是节假日 continue; // 结束当前循环 } else if (isWeekend(cal)) { // 是周末 if (workWeekendsList.contains(dateStr)) { // 是补班的周末 num++; } } else { num++; } } // System.out.println("结果:" + sdf.format(cal.getTime())); return cal.getTime(); } // 判断是不是周末 public static boolean isWeekend(Calendar cal) { if (cal != null) { if ((cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) || (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) { return true; } } return false; } }
讯享网
思路说一下:
先获取当年的法定节假日的日期数组(这个在网上随便找,有很多)和需要补班的周末日期数组,指定一个数量值N,即需要多少个工作日后的日期,然后使用循环来进行统计。从当前时间开始,遍历以后的每一天,若日期属于节假日,则不算;若是补班的周日,则算入工作日,直到N个工作日后,查看那天的日期即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/45480.html