java 当前时间增加工作日,跳过周六周日,特殊节假日,特殊休息日

博客围绕Java开发,提及特殊工作日和特殊休息日需在数据库写死,给出其定义,还给出代码条件 reviews2.getType() == 1 需自行判断增加天数,最终结果为 parse 并提及附加方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说,上代码

Date date1 = new Date();
String format = new SimpleDateFormat("yyyy-MM-dd").format(date1);
String format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date1);


DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(format, formatter);
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");

注:特殊工作日和特殊休息日要在数据库写死

特殊工作日:本来今天周六周日,但是要上班,这就叫特殊工作日

特殊休息日:本来是周一到周五,但是要休息,这就叫特殊休息日

下图示例,切记一年中写全

//特殊工作日
String specialWorkingDays = sysConfigService.getSysConfigValueByConfigKey(Constants.SPECIAL_WORKING_DAYS);
//特殊休息日
String specialRestDays = sysConfigService.getSysConfigValueByConfigKey(Constants.SPECIAL_REST_DAYS);
List<String> specialWorkingDaysList = ToolUtils.dateStrToList(specialWorkingDays);
List<String> specialRestDaysList = ToolUtils.dateStrToList(specialRestDays);

LocalDate localDate = null;

reviews2.getType() == 1: 这只是条件,需要增加几天,自己判断

if(reviews2.getType() == 1){
// 加1天
localDate = TimeUtil.addWorkDays(date, 1,specialWorkingDaysList,specialRestDaysList);
}else if(reviews2.getType() == 2){
// 加5天
localDate = TimeUtil.addWorkDays(date, 5,specialWorkingDaysList,specialRestDaysList);
}else{
//加15天
localDate = TimeUtil.addWorkDays(date, 15,specialWorkingDaysList,specialRestDaysList);
}
String dateString = localDate.format(formatter1);
String v = dateString+" "+format1.split("\\ ")[1];
Date parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(v);

最终结果:parse

附加方法:

/**
* 日期的json字符串转list
* @param dateStr
* @return
*/
public static List<String> dateStrToList(String dateStr){
List<String> dateList = new ArrayList<String>();
try {
if(StringUtils.isNotEmpty(dateStr)) {
dateList = com.alibaba.fastjson.JSONArray.parseArray(dateStr, String.class);
}
return dateList;
}catch(Exception e) {
return dateList;
}
}

/**
*得到截止工作日,比如 10.1为周一 增加5天,得到10.6,如果其中有一天为周六,则得到10.7以此类推
* @param date 当前时间
* @param days 需要增加的天数
* @param strings 特殊工作日
* @param strings1 特殊休息日
* @return
*/
public static LocalDate addWorkDays(LocalDate date, int days,List<String> strings,List<String> strings1) {
int addedDays = 0;
while (addedDays < days) {
date = date.plusDays(1);
if (isWorkDay(date)) {

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateString = date.format(formatter);
int a3 = 0;
for (String localDate : strings1) {
if(localDate.equals(dateString)){
a3++;
}
}
if(a3==0){
addedDays++;
}
}else {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateString = date.format(formatter);
for (String localDate : strings) {
if(localDate.equals(dateString)){
addedDays++;
break;
}
}
}
}
return date;
}

private static boolean isWorkDay(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值