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

话不多说,上代码

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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中判断当前日期是否节假日周六周日可以使用Java的日期类库和国家法定节假日规定来判断。 首先,获取当前日期可以使用Java的Date类或Calendar类。例如: ```java Date date = new Date(); //获取当前日期 Calendar calendar = Calendar.getInstance(); //获取当前日期 ``` 判断当前日期是否是周六周日,可以使用Calendar类的get方法获取当前日期的星期几,如果是1(星期日)或7(星期六)则为周末。例如: ```java int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); //获取当前星期几 if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) { System.out.println("今天是周末"); } ``` 判断当前日期是否是节假日,可以使用国家法定节假日规定来判断。例如,在中国,国家法定节假日包括春节、清明节、劳动节、端午节、中秋节、国庆节等。以下是一个简单的判断方法: ```java SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); String dateStr = sdf.format(date); if ("0101".equals(dateStr)) { System.out.println("今天是元旦节"); } else if ("0501".equals(dateStr)) { System.out.println("今天是劳动节"); } else if ("1001".equals(dateStr)) { System.out.println("今天是国庆节"); } else { System.out.println("今天不是节假日"); } ``` 需要注意的是,国家法定节假日可能会根据政策改变,因此以上判断方法可能不完全准确。如果需要更精确的判断,可以使用一些专门的日期计算工具或API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值