获取指定N个工作日后的日期
2018-04-03 09:37
239 查看
工作中遇到的一个小问题,需要获取指定天数的工作日后的日期,比如: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个工作日后,查看那天的日期即可。
从网上没有找到完全符合要求的例子,只好自己写一个,在这里记录一下。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个工作日后,查看那天的日期即可。
相关文章推荐
- JS获取两个日期工作日相差的小时数(不包含周末)----可以指定一天的上班时间
- java获取2018年指定日期为节假日还是工作日
- 获取指定日期范围的工作日日期
- ThinkPHP中获取指定日期后工作日的具体日期方法
- c#获取指定时区的日期
- [置顶] js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- 获取指定日期的后(前)一(n)天(转)
- java获取当月天数,指定年月的天数,指定日期获取对应星期
- java获取指定日期所在周的第一天和最后一天
- php获取指定日期之间的各个周和月的起止时间
- [原]获取指定日期WeekOfMonth
- [学习笔记]JS获取指定日期前一天
- Java中获取指定日为星期几及其他日期操作
- 获取指定格式的日期字符串,包括前一天或者几天
- js 获取指定日期,剩余天数
- Java实现根据输入的日期以及天数,获取此日期之后的天数的工作日
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- C#获取指定的日期是一年中的第几个周
- 根据指定日期,获取该日期所在周的其他日期
- PHP 获取指定日期的星期方法如下