Java 通过当前日期【时间值自定义】,获取n个工作日【前】或【后】的日期

注:节假日要自己存储到数据库,存储形式自选

import org.apache.commons.lang.StringUtils;
/***  一个非常好用的工具类*  <dependency>*      <groupId>org.apache.commons</groupId>*      <artifactId>commons-lang3</artifactId>*      <version>3.8</version>*  </dependency>* */import java.text.SimpleDateFormat;
import java.util.*;/*** @Description:节假日工具类* @Auther: Work-PC* @Date: 2019-02-13 19:50* @Version: 1.0.0*/
public class HolidayUtil {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");private static SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static void main(String[] args) throws Exception {// 节假日String holidays = "2019-01-01,2019-01-04,2019-01-05,2019-01-06,2019-01-07,2019-01-08,2019-01-09,2019-01-10,2019-04-05,2019-04-06,2019-04-07,2019-05-01,2019-06-07,2019-06-08,2019-06-09,2019-09-13,2019-09-14,2019-09-15,2019-10-01,2019-10-02,2019-10-03,2019-10-04,2019-10-05,2019-10-06,2019-10-07";// 设置工作日int num = 1;// 当前时间String today = sdfs.format(new Date());System.out.println("当前,日期为==============" + today);// num个工作日前String workDayStart = getWorkDayStart(holidays, today, num);System.out.println(num + "个工作日前,日期为========" + workDayStart);// num个工作日后String workDayEnd = getWorkDayEnd(holidays, today, num);System.out.println(num + "个工作日后,日期为========" + workDayEnd);}/*** 获取当前时间之前n个工作日的日期** @param holidays 节假日(日期格式:2019-01-01,2019-01-04,2019-01-05,......)* @param today    当前日期(日期格式:2019-01-01 08:08:08)* @param num      需要设置的n个工作日* @return* @throws Exception*/public static String getWorkDayStart(String holidays, String today, int num) throws Exception {// 转化为数组String[] dayArr = holidays.split(",");List<String> holidayList = new ArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Date date = sdfs.parse(today);// 获取工作日Date workDay = getWorkDay(holidayList, num, date, -1);String workDayStr = sdf.format(workDay);long workTime = getTime(today, workDayStr) - 1000;    // 减1秒return sdfs.format(new Date(workTime));}/*** 获取当前时间之后n个工作日的日期** @param holidays 节假日(日期格式:2019-01-01,2019-01-04,2019-01-05,......)* @param today    当前日期(日期格式:2019-01-01 08:08:08)* @param num      需要设置的n个工作日* @return* @throws Exception*/public static String getWorkDayEnd(String holidays, String today, int num) throws Exception {// 转化为数组String[] dayArr = holidays.split(",");List<String> holidayList = new ArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Date date = sdfs.parse(today);// 获取工作日Date workDay = getWorkDay(holidayList, num, date, 1);String workDayStr = sdf.format(workDay);long workTime = getTime(today, workDayStr) + 1000;    // 加1秒return sdfs.format(new Date(workTime));}/*** 获取工作日** @param holidayList 节假日(日期格式:2019-01-01,2019-01-04,2019-01-05,......)* @param num         需要设置的n个工作日* @param day         目标日期* @return* @throws Exception*/public static Date getWorkDay(List<String> holidayList, int num, Date day, int n) throws Exception {int delay = 1;while (delay <= num) {// 获取前一天或后一天日期Date endDay = getDate(day, n);String time = sdf.format(endDay);//当前日期+1即tomorrow,判断是否是节假日,同时要判断是否是周末,都不是则将scheduleActiveDate日期+1,直到循环num次即可if (!isWeekend(time) && !isHoliday(time, holidayList)) {delay++;} else if (isWeekend(time)) {System.out.println(time + "::是周末");} else if (isHoliday(time, holidayList)) {System.out.println(time + "::是节假日");}day = endDay;}return day;}/*** yyyy-MM-dd HH:mm:ss格式日期---获取时间戳精确到秒** @param start 开始日期(日期格式:2019-01-01 08:08:08)* @param end   结束日期(日期格式:2019-01-01 08:08:08)* @return* @throws Exception*/public static long getTime(String start, String end) throws Exception {if (StringUtil.isEmpty(start) || StringUtil.isEmpty(end)) {throw new RuntimeException("today is empty");}long time1 = sdfs.parse(start).getTime();long time2 = sdf.parse(start).getTime();long time3 = sdf.parse(end).getTime();long time = time3 + (time1 - time2);return time;}/*** 获取前一天或后一天日期** @param date 日期* @param n    判断参数* @return*/public static Date getDate(Date date, int n) {if (n > 0) {    // 获取前一天date = getTomorrow(date);}if (n < 0) {    // 获取后一天date = getYesterday(date);}return date;}/*** 获取后一天的日期** @param date* @return*/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;}/*** 获取前一天的日期** @param date* @return*/public static Date getYesterday(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, -1);date = calendar.getTime();return date;}/*** 判断是否是周末** @param sdate* @return* @throws Exception*/public static boolean isWeekend(String sdate) throws Exception {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;}}/*** 判断是否是节假日** @param sdate* @param list* @return* @throws Exception*/public static boolean isHoliday(String sdate, List<String> list) throws Exception {if (list.size() > 0) {for (int i = 0; i < list.size(); i++) {if (sdate.equals(list.get(i))) {return true;}}}return false;}
}

Java 获取 n个 工作日【前】或【后】的日期相关推荐

  1. JavaScript获取距离某天前或后的日期

    /** * param  Date Object:Mon May 11 13:53:08 UTC+0800 2015  * n 自param 起向后多少天 * return Date Object:M ...

  2. 提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。

    提供源码:java获取节假日.工作日,存入数据库,查找指定日期前一天,后一天. 码云地址: https://gitee.com/guyuanman/holiday 业务场景: 好多公司的业务在处理的时 ...

  3. Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差

    获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...

  4. Vue获取当前日期时间、获取指定时间的前、后多少天的日期

    https://blog.csdn.net/ForeverBana/article/details/103472751  Vue获取当前日期 https://blog.csdn.net/weixin_ ...

  5. js获取当前指定的前几天的日期(如当前时间的前七天的日期)

    <html><head> <meta http-equiv="Content-Type" content="text/html; chars ...

  6. java获取网络图片(比如微信授权后的头像)上传至linux服务器

    //原生获取微信信息CodeWxUserInfoVo,然后将头像上传至自己的linux服务器 //因为上传用的是 MultipartFile file所以我下载图片后返回了MultipartFile文 ...

  7. Java 获取当前时间的前几分钟的时间点的方法

    问题描述 有时候比如知道当前时间是 12:25:12, 先获取5分钟前的时间即分钟数-5为12:20:12 但是如果时间是12:03:12, 前五分钟为11:58:12, 获取就开始要判断了,如果获取 ...

  8. 【Java数据结构】二叉树的前中后序遍历(递归和非递归)

    二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...

  9. java获取时间戳几天前

    N天前开始时间 /* N天开始时间* 1 == 昨天* 2 == 前天* 3 == 以此类推*/public static long NumberOfDaysStartUnixTime(int Num ...

最新文章

  1. 实施Kubernetes可以实现多云架构安全
  2. java sql函数_Java调用Sql存储过程实例讲解
  3. debian下tomcat8环境搭建
  4. redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”
  5. Effective_STL 学习笔记(十七) 使用 “交换技巧” 来修整过剩的容量
  6. 学会这 6 招,网页搜索一秒就能搜到你想要的【老司机必备神技】
  7. struts2数据库操作_Struts 2操作错误和操作消息
  8. Kettle处理300万条数据-问题整理
  9. Macbook pro M1使用免费的方法读写NTFS的折腾之路
  10. 【css】鼠标禁用样式
  11. 光电信息科学与工程学c语言吗,2019光电信息科学与工程专业怎么样、学什么、前景好吗...
  12. 2021金昌市一中高考成绩查询,2021届甘肃省金昌市一中高三下学期高考一模考试数学(理)试卷参考答案.docx...
  13. 雨天的尾巴——LCA+树上差分+动态开点+线段树合并
  14. android自定义抽奖,Android 抽奖活动 (自定义view实现) 转盘
  15. SaaS 系统的应用与架构
  16. JSP WAP 网站开发
  17. 百万级数据连表查询优化
  18. UWB_安信可NodeMCU-BU01的使用
  19. 有没有关于教育技术学的论文选题参考?
  20. HANA数据自助查询

热门文章

  1. 中华人民共和国户口登记条例
  2. 财报汇总 | 迪卡侬、飞利浦、霍尼韦尔、3M​、百胜中国等12家企业公布最新业绩
  3. 地狱模式的居转户记录06
  4. x265-1.8版本-encoder/slicetype.cpp注释
  5. 河北欧格教育:什么是白底图
  6. 江西赣州移动宽带DNS
  7. Java基础知识11——数组
  8. Python模块之二:Python3 常用模块总结
  9. Compiling C
  10. arcgis 界线外 遮盖_ArcGIS按行政界线批量导出地图