«

2021年8月9日 Java获取n天后的工作日时间

Mahalalel 发布于 阅读:3246 Java


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 的代码,有需要自取。

获取N天后的工作日