java给定起始时间段和所需日期号获取符合条件日期集合

需求:

每个月可能跑批,要求给定开始时间和结束时间以及每月多少号进行跑批,在该时间段内找到符合条件的日期,如果是29,30,31这几天个别月份可能没有,可以赋值为当月最后一天。

代码实现

package com.qcj;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
 *创建人:inspur.qichangjian
 */
public class test_cal {
    public static void main(String[] args) throws Exception {
        String minDate = "2016-12-31";//三月二日会变成
        String maxDate = "2019-05-2";
        List<String> test = getMonthBetween3(minDate,maxDate,30);
        System.out.println(test);
    }

    public static List<String> getMonthBetween3(String minDate, String maxDate,int day) throws Exception {
        int flag = day;//几号
        ArrayList<String> result = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();
        min.setTime(sdf.parse(minDate));
        max.setTime(sdf.parse(maxDate));

        Calendar curr = min;
        while (curr.before(max)) {// 当前Calendar对象 是否 晚于calendar
           // System.out.println("标志:"+flag + "curr日期:" + sdf.format(curr.getTime()) +"|是否不相等" + (curr.get(Calendar.DATE) != flag));
            if(curr.get(Calendar.DATE) != flag){//关键注释1:判断当前日期日是否和需要的日期是一天
                System.out.println("进入if......");
                //设置为这个月的最后一天
                //getMaxMonthDate(sdf.format(curr.getTime()));
                Calendar lastday = Calendar.getInstance();
                lastday.setTime(sdf.parse(getMaxMonthDate(sdf.format(curr.getTime()))));//设置时间
                curr = lastday;//关键注释二:将当前月的最后日期赋值给curr
                if(curr.get(Calendar.DATE) > flag){//关键注释三:判断修改后的时间是否和需要时间相等,如果赋值的月底时间是31 需要的是30号就重新赋值
                    curr.set(curr.get(Calendar.YEAR),curr.get(Calendar.MONTH),flag);//关键注释四:修改最后时间为需要的时间
                }
            }
            result.add(sdf.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);//加一个月
        }
        return result;
    }

    /**
     * 获取当前月份最后日期
     * @param date
     * @return
     * @throws ParseException
     */
    public static String getMaxMonthDate(String date) throws ParseException, java.text.ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(sdf.parse(date));
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return sdf.format(calendar.getTime());
    }
}

你可能感兴趣的:(Java学习)