话不多说,上代码
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;
}