Java 获取一段时间内,每周几或者每月几号的详细日期,结果为日期数组

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Test {
    public static void main(String[] args) throws ParseException {


        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = sdf.parse("2022-11-15");//开始时间(包含该天)
        Date endDate = sdf.parse("2023-11-15");//结束时间(不包含该天)
        String daysOfWeekInput = "1,7";  //每周1,日
        String daysOfMonthInput = "4,13,31"; //每月4号,13号,31号


        List<String> dateFromWeek = getDateFromWeek(sdf, startDate, endDate, daysOfWeekInput);
        System.out.println("dateFromWeek" + dateFromWeek);
        //[2022-11-20, 2022-11-21, 2022-11-27, 2022-11-28, 2022-12-04, 2022-12-05, 2022-12-11, 2022-12-12, 2022-12-18, 2022-12-19, 2022-12-25, 2022-12-26, 2023-01-01, 2023-01-02, 2023-01-08, 2023-01-09, 2023-01-15, 2023-01-16, 2023-01-22, 2023-01-23, 2023-01-29, 2023-01-30, 2023-02-05, 2023-02-06, 2023-02-12, 2023-02-13, 2023-02-19, 2023-02-20, 2023-02-26, 2023-02-27, 2023-03-05, 2023-03-06, 2023-03-12, 2023-03-13, 2023-03-19, 2023-03-20, 2023-03-26, 2023-03-27, 2023-04-02, 2023-04-03, 2023-04-09, 2023-04-10, 2023-04-16, 2023-04-17, 2023-04-23, 2023-04-24, 2023-04-30, 2023-05-01, 2023-05-07, 2023-05-08, 2023-05-14, 2023-05-15, 2023-05-21, 2023-05-22, 2023-05-28, 2023-05-29, 2023-06-04, 2023-06-05, 2023-06-11, 2023-06-12, 2023-06-18, 2023-06-19, 2023-06-25, 2023-06-26, 2023-07-02, 2023-07-03, 2023-07-09, 2023-07-10, 2023-07-16, 2023-07-17, 2023-07-23, 2023-07-24, 2023-07-30, 2023-07-31, 2023-08-06, 2023-08-07, 2023-08-13, 2023-08-14, 2023-08-20, 2023-08-21, 2023-08-27, 2023-08-28, 2023-09-03, 2023-09-04, 2023-09-10, 2023-09-11, 2023-09-17, 2023-09-18, 2023-09-24, 2023-09-25, 2023-10-01, 2023-10-02, 2023-10-08, 2023-10-09, 2023-10-15, 2023-10-16, 2023-10-22, 2023-10-23, 2023-10-29, 2023-10-30, 2023-11-05, 2023-11-06, 2023-11-12, 2023-11-13]

        List<String> dateFromMonth = getDateFromMonth(sdf, startDate, endDate, daysOfMonthInput);
        System.out.println("dateFromMonth" + dateFromMonth);
        //[2022-12-04, 2022-12-13, 2022-12-31, 2023-01-04, 2023-01-13, 2023-01-31, 2023-02-04, 2023-02-13, 2023-03-04, 2023-03-13, 2023-03-31, 2023-04-04,2023-04-13, 2023-05-04, 2023-05-13, 2023-05-31, 2023-06-04, 2023-06-13, 2023-07-04, 2023-07-13, 2023-07-31, 2023-08-04, 2023-08-13, 2023-08-31, 2023-09-04, 2023-09-13, 2023-10-04, 2023-10-13, 2023-10-31, 2023-11-04, 2023-11-13]

        
    private static List<String> getDateFromWeek(SimpleDateFormat sdf, Date startDate, Date endDate, String daysOfWeekInput) {
        List<String> dayWeekResult = new ArrayList<>();
        while (startDate.before(endDate)) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
            if (dayOfWeek == 0) {
                dayOfWeek = 7;
            }
            if (daysOfWeekInput.contains(dayOfWeek + "")) {
                dayWeekResult.add(sdf.format(startDate));
            }
            cal.add(Calendar.DATE, 1);
            startDate = cal.getTime();
        }
        return dayWeekResult;
    }

    private static List<String> getDateFromMonth(SimpleDateFormat sdf, Date startDate, Date endDate, String daysOfMonthInput) {
        List<String> daysOfMonthInputList = Arrays.asList(daysOfMonthInput.split(","));
        List<String> dayMonthResult = new ArrayList<>();
        while (startDate.before(endDate)) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
            if (daysOfMonthInputList.contains(dayOfMonth+"")) {
                dayMonthResult.add(sdf.format(startDate));
            }
            cal.add(Calendar.DATE, 1);
            startDate = cal.getTime();
        }
        return dayMonthResult;
    }
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值