news 2026/8/16 17:46:47

java计算当前日期后N个工作日的日期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java计算当前日期后N个工作日的日期

在工作中遇到涉及工作日相关的需求,下面是个工具类

WorkDayUtils如下:

packagecom.sqds.utils;importorg.apache.commons.lang.StringUtils;importjava.text.SimpleDateFormat;importjava.util.*;/** * 工作日计算工具类 * Created by MJ·J on 2019-05-24 */publicclassWorkDayUtils{privatestaticSimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");/*private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");*//** * 获取当前时间之前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 */publicstaticStringgetWorkDayStart(Stringholidays,Stringtoday,intnum)throwsException{// 转化为数组String[]dayArr=holidays.split(",");List<String>holidayList=newArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Datedate=sdf.parse(today);// 获取工作日DateworkDay=getWorkDay(holidayList,num,date,-1);StringworkDayStr=sdf.format(workDay);longworkTime=getTime(today,workDayStr)-1000;// 减1秒returnsdf.format(newDate(workTime));}/** * 获取当前时间之后n个工作日的日期 * * @param dd 当前日期 * @param num 需要设置的n个工作日 * @return * @throws Exception */publicstaticDategetWorkDayEnd(Datedd,intnum)throwsException{// 节假日Stringholidays="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";// 当前时间Stringtoday=sdf.format(dd);// 转化为数组String[]dayArr=holidays.split(",");List<String>holidayList=newArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Datedate=sdf.parse(today);// 获取工作日DateworkDay=getWorkDay(holidayList,num,date,1);StringworkDayStr=sdf.format(workDay);longworkTime=getTime(today,workDayStr)+1000;// 加1秒returnnewDate(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 */publicstaticStringgetWorkDayEnd(Stringholidays,Stringtoday,intnum)throwsException{// 转化为数组String[]dayArr=holidays.split(",");List<String>holidayList=newArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Datedate=sdf.parse(today);// 获取工作日DateworkDay=getWorkDay(holidayList,num,date,1);StringworkDayStr=sdf.format(workDay);longworkTime=getTime(today,workDayStr)+1000;// 加1秒returnsdf.format(newDate(workTime));}/** * 获取当前时间之后n个工作日的日期 * @param today 当前日期(日期格式:2019-01-01 08:08:08) * @param num 需要设置的n个工作日 * @return * @throws Exception */publicstaticStringgetWorkDayEnd(Stringtoday,intnum)throwsException{// 节假日Stringholidays="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";// 转化为数组String[]dayArr=holidays.split(",");List<String>holidayList=newArrayList<String>(Arrays.asList(dayArr));// 将字符串转换成日期Datedate=sdf.parse(today);// 获取工作日DateworkDay=getWorkDay(holidayList,num,date,1);StringworkDayStr=sdf.format(workDay);longworkTime=getTime(today,workDayStr)+1000;// 加1秒returnsdf.format(newDate(workTime));}/** * 获取工作日 * * @param holidayList 节假日(日期格式:2019-01-01,2019-01-04,2019-01-05,......) * @param num 需要设置的n个工作日 * @param day 目标日期 * @return * @throws Exception */publicstaticDategetWorkDay(List<String>holidayList,intnum,Dateday,intn)throwsException{intdelay=1;while(delay<=num){// 获取前一天或后一天日期DateendDay=getDate(day,n);Stringtime=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;}returnday;}/** * 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 */publicstaticlonggetTime(Stringstart,Stringend)throwsException{if(org.apache.commons.lang.StringUtils.isEmpty(start)||StringUtils.isEmpty(end)){thrownewRuntimeException("today is empty");}longtime1=sdf.parse(start).getTime();longtime2=sdf.parse(start).getTime();longtime3=sdf.parse(end).getTime();longtime=time3+(time1-time2);returntime;}/** * 获取前一天或后一天日期 * * @param date 日期 * @param n 判断参数 * @return */publicstaticDategetDate(Datedate,intn){if(n>0){// 获取前一天date=getTomorrow(date);}if(n<0){// 获取后一天date=getYesterday(date);}returndate;}/** * 获取后一天的日期 * * @param date * @return */publicstaticDategetTomorrow(Datedate){Calendarcalendar=Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH,+1);date=calendar.getTime();returndate;}/** * 获取前一天的日期 * * @param date * @return */publicstaticDategetYesterday(Datedate){Calendarcalendar=Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH,-1);date=calendar.getTime();returndate;}/** * 判断是否是周末 * * @param sdate * @return * @throws Exception */publicstaticbooleanisWeekend(Stringsdate)throwsException{Datedate=sdf.parse(sdate);Calendarcal=Calendar.getInstance();cal.setTime(date);if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){returntrue;}else{returnfalse;}}/** * 判断是否是节假日 * * @param sdate * @param list * @return * @throws Exception */publicstaticbooleanisHoliday(Stringsdate,List<String>list)throwsException{if(list.size()>0){for(inti=0;i<list.size();i++){if(sdate.equals(list.get(i))){returntrue;}}}returnfalse;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 13:15:42

RMBG-2.0性能压测:连续处理500张图内存泄漏检测与稳定性验证

✂ RMBG-2.0 (BiRefNet) 极速智能抠图工具 基于RMBG-2.0&#xff08;BiRefNet&#xff09; 目前最强开源抠图模型开发的本地智能抠图工具&#xff0c;支持一键去除图片背景并生成透明背景PNG文件&#xff0c;内置标准图像预处理与原始尺寸还原逻辑&#xff0c;抠图精度高、边缘…

作者头像 李华
网站建设 2026/8/15 14:44:38

[特殊字符] GLM-4V-9B企业应用:自动化图文内容审核系统构建

&#x1f985; GLM-4V-9B企业应用&#xff1a;自动化图文内容审核系统构建 在内容爆炸式增长的今天&#xff0c;电商、社交平台、媒体机构每天需处理数以万计的图文素材——商品主图是否合规&#xff1f;用户上传的配图是否含敏感信息&#xff1f;营销海报是否存在版权风险&am…

作者头像 李华
网站建设 2026/7/31 8:39:04

零基础玩转Nano-Banana:一键生成专业级平铺图

零基础玩转Nano-Banana&#xff1a;一键生成专业级平铺图 你有没有过这样的时刻——盯着一张堆满零件的电路板照片发呆&#xff0c;想把它变成说明书里那种清爽规整的分解图&#xff1b;或者手握一件新设计的帆布包&#xff0c;却苦于找不到既专业又吸睛的展示方式&#xff1f…

作者头像 李华
网站建设 2026/8/14 22:43:52

如何用Z-Image-Turbo解决图像模糊问题?真实调参经验分享

如何用Z-Image-Turbo解决图像模糊问题&#xff1f;真实调参经验分享 图像模糊是AI生成内容中最常见、最令人沮丧的问题之一——你精心构思的提示词&#xff0c;却换来一张“雾里看花”般的输出&#xff1a;边缘发虚、细节糊成一片、主体轮廓不清晰。很多人误以为这是模型能力不…

作者头像 李华
网站建设 2026/8/2 11:04:26

图像编辑新选择:科哥镜像支持多种格式上传

图像编辑新选择&#xff1a;科哥镜像支持多种格式上传 1. 为什么你需要这个图像编辑工具 你有没有遇到过这样的情况&#xff1a;一张精心拍摄的照片&#xff0c;却被路人、电线杆或者水印破坏了整体美感&#xff1b;电商主图上需要去掉模特身上的logo&#xff0c;但PS抠图耗时…

作者头像 李华
网站建设 2026/8/8 10:57:00

YOLOv9镜像使用建议:新手先跑通demo再改代码

YOLOv9镜像使用建议&#xff1a;新手先跑通demo再改代码 在目标检测项目落地过程中&#xff0c;你是否经历过这样的场景&#xff1a;刚下载完YOLOv9官方代码&#xff0c;还没开始写第一行训练脚本&#xff0c;就卡在了CUDA版本冲突、PyTorch编译报错、OpenCV不兼容的循环里&…

作者头像 李华