Java 获取 n个 工作日【前】或【后】的日期
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个 工作日【前】或【后】的日期相关推荐
- JavaScript获取距离某天前或后的日期
/** * param Date Object:Mon May 11 13:53:08 UTC+0800 2015 * n 自param 起向后多少天 * return Date Object:M ...
- 提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。
提供源码:java获取节假日.工作日,存入数据库,查找指定日期前一天,后一天. 码云地址: https://gitee.com/guyuanman/holiday 业务场景: 好多公司的业务在处理的时 ...
- Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差
获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...
- Vue获取当前日期时间、获取指定时间的前、后多少天的日期
https://blog.csdn.net/ForeverBana/article/details/103472751 Vue获取当前日期 https://blog.csdn.net/weixin_ ...
- js获取当前指定的前几天的日期(如当前时间的前七天的日期)
<html><head> <meta http-equiv="Content-Type" content="text/html; chars ...
- java获取网络图片(比如微信授权后的头像)上传至linux服务器
//原生获取微信信息CodeWxUserInfoVo,然后将头像上传至自己的linux服务器 //因为上传用的是 MultipartFile file所以我下载图片后返回了MultipartFile文 ...
- Java 获取当前时间的前几分钟的时间点的方法
问题描述 有时候比如知道当前时间是 12:25:12, 先获取5分钟前的时间即分钟数-5为12:20:12 但是如果时间是12:03:12, 前五分钟为11:58:12, 获取就开始要判断了,如果获取 ...
- 【Java数据结构】二叉树的前中后序遍历(递归和非递归)
二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...
- java获取时间戳几天前
N天前开始时间 /* N天开始时间* 1 == 昨天* 2 == 前天* 3 == 以此类推*/public static long NumberOfDaysStartUnixTime(int Num ...
最新文章
- 实施Kubernetes可以实现多云架构安全
- java sql函数_Java调用Sql存储过程实例讲解
- debian下tomcat8环境搭建
- redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”
- Effective_STL 学习笔记(十七) 使用 “交换技巧” 来修整过剩的容量
- 学会这 6 招,网页搜索一秒就能搜到你想要的【老司机必备神技】
- struts2数据库操作_Struts 2操作错误和操作消息
- Kettle处理300万条数据-问题整理
- Macbook pro M1使用免费的方法读写NTFS的折腾之路
- 【css】鼠标禁用样式
- 光电信息科学与工程学c语言吗,2019光电信息科学与工程专业怎么样、学什么、前景好吗...
- 2021金昌市一中高考成绩查询,2021届甘肃省金昌市一中高三下学期高考一模考试数学(理)试卷参考答案.docx...
- 雨天的尾巴——LCA+树上差分+动态开点+线段树合并
- android自定义抽奖,Android 抽奖活动 (自定义view实现) 转盘
- SaaS 系统的应用与架构
- JSP WAP 网站开发
- 百万级数据连表查询优化
- UWB_安信可NodeMCU-BU01的使用
- 有没有关于教育技术学的论文选题参考?
- HANA数据自助查询