2021年8月9日 Java获取n天后的工作日时间
1、背景
2021年8月5日 JavaScript获取工作日
上篇文章讲到,Lucas提了个需求:初始时间为工作日,要找n天后的工作日的时间,要用JavaScript来写,周末又来了,JavaScript不满足需求了,要用Java来写。
还要写的通用一些。我脸上浮现了毫无灵魂的微笑。。。
当然,只是排除了周末,节假日不管的!
废话不多说,直接上代码吧!
2、代码
package com.mahalalel.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 获取n天后的工作日时间
*
* @author Mahalalel
* @createTime 2021/8/9 14:12
*/
public class WorkDayUtil {
/**
* 日期格式
*/
public static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
/**
* 获取工作日时间
*
* @param startDate 起始时间
* @param num num个工作日
* @return
*/
public static Date getWorkDay(Date startDate, int num) throws ParseException {
Date tomorrow = null;
int delay = 1;
while (delay <= num) {
tomorrow = getTomorrow(startDate);
if (!isWeekend(SDF.format(tomorrow))) {
delay++;
}
startDate = tomorrow;
}
return startDate;
}
/**
* 判断日期字符串是否为周末
*
* @param dateString 日期字符串
* @return
*/
private static boolean isWeekend(String dateString) throws ParseException {
Date date = SDF.parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
}
/**
* 获取tomorrow的日期
*
* @param startDate 起始时间
* @return
*/
private static Date getTomorrow(Date startDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(Calendar.DAY_OF_MONTH, +1);
return cal.getTime();
}
}
3、测试
package com.mahalalel;
import com.mahalalel.utils.WorkDayUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Mahalalel
* @createTime 2021/8/9 14:30
*/
public class TestWorkDayUtil {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date workDay = WorkDayUtil.getWorkDay(new Date(), 10);
System.out.println(sdf.format(workDay));
}
}
测试结果:2021-08-23
本文参考了博客园https://www.cnblogs.com/yadongliang/p/9549349.html 的代码,有需要自取。