Java:获取两个区间内 为周几或星期符合 的所有日期,指定日期 使用周数计算出相对应的工作日

Java:获取两个区间内 为周几或星期符合 的所有日期,指定日期 使用周数计算出相对应的工作日

  • 测试类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class TestPan11 {

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        //获取两个区间内 为 周二的所有日期
        List<String> dayOfWeekWithinDateInterval = getDayOfWeekWithinDateInterval("2020-12-14", "2021-01-14", 2);
        System.out.println("获取两个区间内 为 周二的所有日期 : "+dayOfWeekWithinDateInterval);
        //结果: [2020-12-15, 2020-12-22, 2020-12-29, 2021-01-05, 2021-01-12]

        // 指定日期加上 *  天  算出结束日期   备注  注意看调用这个方法的执行注释  这个4 和7  的区别,4为4周。7天为一周
        String endDate= selectBeginAndEndDate("2020-12-14", 4);
        System.out.println("指定日期加上 *  天  算出结束日期 : "+endDate);
        //结果: 2021-01-11

        //这个是算出两个日期区间内,的所有日期
        List<String> dates = getBeginAndEndDateBetween("2020-12-14", "2021-01-11");
        System.out.println(dates);

        //指定日期,推算计算出这个日期为: 周几?星期几?
        String week = getWeek(sdf.parse("2020-12-14"));
        System.out.println("指定日期,推算计算出这个日期为 : "+week);
        //结果 : 周一

        //区间内,计算多个周数的日期集合
        String scheduleWeek = "2,4";
        List<String> strings = Arrays.asList(scheduleWeek.split(","));

//        //2、使用:得出集合日期 - 不排班的日期  = 获取区间内要排班的所有日期
        Collection<String> scheduleRuleDateList = new ArrayList<>();
        for (String dayWeek : strings) {
//            List<String> dayOfWeekWithinDateInterva12 = getDayOfWeekWithinDateInterval("2020-12-14", endDate, Integer.parseInt(dayWeek));
            List<String> dayOfWeekWithinDateInterva12 = getDayOfWeekWithinDateInterval("2020-12-14", "2021-01-11", Integer.parseInt(dayWeek));
            scheduleRuleDateList.addAll(dayOfWeekWithinDateInterva12);
        }
        System.out.println("指定日期 + 周数 算出区间内所有日期  得出集合日期 : "+scheduleRuleDateList);



    }

    /**
     *      指定日期;算出指定 * 某多少天数的日期
     * @param startDate
     * @param weekNum
     */
    public static String selectBeginAndEndDate(String startDate,long weekNum)  {
        try {
            weekNum = weekNum * 7-1;    // - 注意一点,* 7 这个暂时使用到这个为周数的,如果换成天或月或年。相对应要改变。-1:起始日期算 1 天+7 = 8天  -1是结束日期宿回一天,使用起始日期顶
            Date date = sdf.parse(startDate); // 指定日期
            long time = date.getTime(); // 得到指定日期的毫秒数
            weekNum = weekNum*24*60*60*1000; // 要加上的天数转换成毫秒数
            time+=weekNum; // 相加得到新的毫秒数
            return sdf.format(new Date(time)); // 将毫秒数转换成日期
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *      指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期
     * @param dateBegin
     * @param dateEnd
     * @param weekDays
     */
    public static List<String> getDayOfWeekWithinDateInterval(String dateBegin, String dateEnd, int weekDays) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<String> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
//        List<Date> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
        Calendar cal = Calendar.getInstance();
        String[] dateInterval = {dateBegin, dateEnd};
        Date[] dates = new Date[dateInterval.length];
        for (int i = 0; i < dateInterval.length; i++) {
            String[] ymd = dateInterval[i].split("[^\\d]+");
            cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));
            dates[i] = cal.getTime();
        }
        for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {
            cal.setTime(date);
            if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {
                String format = sdf.format(date);  //控制为 返回什么类型的 相反即可
                dateResult.add(format);  //控制为 返回什么类型的 相反即可
//                dateResult.add(date);
            }
            cal.add(Calendar.DATE, 1);
            date = cal.getTime();
        }
        return dateResult;
    }


    /**
     *      指定日期:算出指定日期是周几或是星期几
     * @param date
     */
    public static String getWeek(Date date){
//        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if(week_index<0){
            week_index = 0;
        }
        return weeks[week_index];
    }

    /**
     * 获取两个日期之间的所有日期
     *
     * @param beginDate  开始日期
     * @param endDate   结束日期
     * @return  List集合
     */
    public static List<String> getBeginAndEndDateBetween(String beginDate, String endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<String> list = new ArrayList<String>(); //保存日期的集合
        Date date_start = sdf.parse(beginDate);
        Date date_end = sdf.parse(endDate);
        Date date =date_start;
        Calendar cd = Calendar.getInstance();//用Calendar 进行日期比较判断
        while (date.getTime() <= date_end.getTime()){
            list.add(sdf.format(date));
            cd.setTime(date);
            cd.add(Calendar.DATE, 1);//增加一天 放入集合
            date=cd.getTime();
        }
        return list;
    }
 
  • 指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期
    /**
     *      指定起始日期 : 指定结束日期 :指定周几 ,算出区间内指定周几的日期
     * @param dateBegin
     * @param dateEnd
     * @param weekDays
     */
    public static List<String> getDayOfWeekWithinDateInterval(String dateBegin, String dateEnd, int weekDays) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<String> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
//        List<Date> dateResult = new ArrayList<>();   //如果要换成日期类型的这里定义
        Calendar cal = Calendar.getInstance();
        String[] dateInterval = {dateBegin, dateEnd};
        Date[] dates = new Date[dateInterval.length];
        for (int i = 0; i < dateInterval.length; i++) {
            String[] ymd = dateInterval[i].split("[^\\d]+");
            cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));
            dates[i] = cal.getTime();
        }
        for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {
            cal.setTime(date);
            if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {
                String format = sdf.format(date);  //控制为 返回什么类型的 相反即可
                dateResult.add(format);  //控制为 返回什么类型的 相反即可
//                dateResult.add(date);
            }
            cal.add(Calendar.DATE, 1);
            date = cal.getTime();
        }
        return dateResult;
    }

  • 指定日期;算出指定 * 某多少天数的日期
    /**
     *      指定日期;算出指定 * 某多少天数的日期
     * @param startDate
     * @param day
     */
    public static String selectBeginAndEndDate(String startDate,long day) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 日期格式
        Date date = dateFormat.parse(startDate); // 指定日期
        long time = date.getTime(); // 得到指定日期的毫秒数
        day = day*7*24*60*60*1000; // 要加上的天数转换成毫秒数   - 注意一点,* 7 这个暂时使用到这个为周数的,如果换成天或月或年。相对应要改变。
        time+=day; // 相加得到新的毫秒数
        return dateFormat.format(new Date(time)); // 将毫秒数转换成日期
    }

  • 指定日期:算出指定日期是周几或是星期几
    /**
     *      指定日期:算出指定日期是周几或是星期几
     * @param date
     */
    public static String getWeek(Date date){
//        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if(week_index<0){
            week_index = 0;
        }
        return weeks[week_index];
    }

  • 获取两个日期之间的所有日期
    /**
     * 获取两个日期之间的所有日期
     *
     * @param beginDate  开始日期
     * @param endDate   结束日期
     * @return  List集合
     */
    public static List<String> getBeginAndEndDateBetween(String beginDate, String endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<String> list = new ArrayList<String>(); //保存日期的集合
        Date date_start = sdf.parse(beginDate);
        Date date_end = sdf.parse(endDate);
        Date date =date_start;
        Calendar cd = Calendar.getInstance();//用Calendar 进行日期比较判断
        while (date.getTime() <= date_end.getTime()){
            list.add(sdf.format(date));
            cd.setTime(date);
            cd.add(Calendar.DATE, 1);//增加一天 放入集合
            date=cd.getTime();
        }
        return list;
    }

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值