Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取给定日期范围之间月份的开始日期和结束日期_Java_Date_Calendar - Fatal编程技术网

Java 获取给定日期范围之间月份的开始日期和结束日期

Java 获取给定日期范围之间月份的开始日期和结束日期,java,date,calendar,Java,Date,Calendar,我想列出给定日期范围内的日期,如-- ex:fromDate-15/10/2013和toDate-15/12/2013 现在名单应该是 [2013年10月15日、2013年10月31日、2013年1月1日、2013年11月30日、2013年12月1日、2013年12月15日] 我已经写了这个代码-- private List datesList=new ArrayList(); 公共无效findLastDate(){ 日期lastDateOfMonth; Date firstDateOfNext

我想列出给定日期范围内的日期,如--

ex:fromDate-15/10/2013和toDate-15/12/2013

现在名单应该是

[2013年10月15日、2013年10月31日、2013年1月1日、2013年11月30日、2013年12月1日、2013年12月15日]

我已经写了这个代码--

private List datesList=new ArrayList();
公共无效findLastDate(){
日期lastDateOfMonth;
Date firstDateOfNextMonth=null;
datesList.add(fromDate);
做{
日历=Calendar.getInstance();
if(firstDateOfNextMonth==null){
日历。设置时间(fromDate);
}否则{
日历设置时间(下个月的第一个日期);
}
calendar.add(calendar.MONTH,1);
calendar.set(calendar.DAY\u/u月,1);
calendar.add(calendar.DATE,-1);
lastDateOfMonth=calendar.getTime();
datesList.add(lastDateOfMonth);
Calendar calendar2=Calendar.getInstance();
日历2.设置时间(lastDateOfMonth);
calendar2.add(Calendar.MONTH,1);
calendar2.set(Calendar.DAY\u OF_MONTH,1);
calendar2.add(Calendar.DATE,0);
firstDateOfNextMonth=calendar2.getTime();
datesList.add(下个月的第一个日期);
}而(下个月的第一天)与(今天)相比<0;
datesList.add(toDate);
System.out.println(“日期列表”+日期列表);
}

但是我得到了一份名单

[2013年10月15日、2013年10月31日、2013年1月1日、2013年11月30日、2013年12月1日、2013年12月30日、2014年1月1日、2013年12月15日]


2013年12月30日和2014年1月1日不应该在列表中,因此while循环中的情况应该是什么?我没有得到它,请帮助我…

基本上,你应该做两件事

  • 日历中添加
    值后,需要检查该值是否在
    结束时间之后
    ,以及
  • 除非它等于结束时间,否则从列表中删除最后日期
  • 例如

    List<Date> dates = new ArrayList<>(25);
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    
    dates.add(cal.getTime());
    while (cal.before(endCal)) {
    
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        dates.add(cal.getTime());
        if (cal.before(endCal)) {
            cal.add(Calendar.DATE, 1);
            dates.add(cal.getTime());
        }
    
    }
    
    dates.remove(dates.size() - 1);
    dates.add(endCal.getTime());
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : dates) {
        System.out.println(sdf.format(d));
    }
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    Date fromDate = cal.getTime();
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    Date toDate = endCal.getTime();
    
    List<Date> datesList = new ArrayList<>(25);
    datesList.add(fromDate);
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(fromDate);
    do {
    
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);
    
        if (calendar.getTime().before(toDate)) {
    
            datesList.add(calendar.getTime());
    
            calendar.add(Calendar.MONTH, 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.DATE, 0);
    
            if (calendar.getTime().before(toDate)) {
    
                datesList.add(calendar.getTime());
    
            }
    
        }
    
    } while (calendar.getTime().before(toDate));
    
    datesList.add(toDate);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : datesList) {
        System.out.println(sdf.format(d));
    }
    
    根据原始代码更新了示例

    List<Date> dates = new ArrayList<>(25);
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    
    dates.add(cal.getTime());
    while (cal.before(endCal)) {
    
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        dates.add(cal.getTime());
        if (cal.before(endCal)) {
            cal.add(Calendar.DATE, 1);
            dates.add(cal.getTime());
        }
    
    }
    
    dates.remove(dates.size() - 1);
    dates.add(endCal.getTime());
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : dates) {
        System.out.println(sdf.format(d));
    }
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    Date fromDate = cal.getTime();
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    Date toDate = endCal.getTime();
    
    List<Date> datesList = new ArrayList<>(25);
    datesList.add(fromDate);
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(fromDate);
    do {
    
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);
    
        if (calendar.getTime().before(toDate)) {
    
            datesList.add(calendar.getTime());
    
            calendar.add(Calendar.MONTH, 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.DATE, 0);
    
            if (calendar.getTime().before(toDate)) {
    
                datesList.add(calendar.getTime());
    
            }
    
        }
    
    } while (calendar.getTime().before(toDate));
    
    datesList.add(toDate);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : datesList) {
        System.out.println(sdf.format(d));
    }
    

    注意:这两个代码段都没有做的一件事是检查列表中的最后一个日期是否实际上是结束日期(尽管从外观上看,您似乎能够绕过这一需要)

    基本上,您应该做两件事

  • 日历中添加
    值后,需要检查该值是否在
    结束时间之后
    ,以及
  • 除非它等于结束时间,否则从列表中删除最后日期
  • 例如

    List<Date> dates = new ArrayList<>(25);
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    
    dates.add(cal.getTime());
    while (cal.before(endCal)) {
    
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        dates.add(cal.getTime());
        if (cal.before(endCal)) {
            cal.add(Calendar.DATE, 1);
            dates.add(cal.getTime());
        }
    
    }
    
    dates.remove(dates.size() - 1);
    dates.add(endCal.getTime());
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : dates) {
        System.out.println(sdf.format(d));
    }
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    Date fromDate = cal.getTime();
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    Date toDate = endCal.getTime();
    
    List<Date> datesList = new ArrayList<>(25);
    datesList.add(fromDate);
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(fromDate);
    do {
    
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);
    
        if (calendar.getTime().before(toDate)) {
    
            datesList.add(calendar.getTime());
    
            calendar.add(Calendar.MONTH, 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.DATE, 0);
    
            if (calendar.getTime().before(toDate)) {
    
                datesList.add(calendar.getTime());
    
            }
    
        }
    
    } while (calendar.getTime().before(toDate));
    
    datesList.add(toDate);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : datesList) {
        System.out.println(sdf.format(d));
    }
    
    根据原始代码更新了示例

    List<Date> dates = new ArrayList<>(25);
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    
    dates.add(cal.getTime());
    while (cal.before(endCal)) {
    
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        dates.add(cal.getTime());
        if (cal.before(endCal)) {
            cal.add(Calendar.DATE, 1);
            dates.add(cal.getTime());
        }
    
    }
    
    dates.remove(dates.size() - 1);
    dates.add(endCal.getTime());
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : dates) {
        System.out.println(sdf.format(d));
    }
    
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 15);
    cal.set(Calendar.MONTH, 9);
    cal.set(Calendar.YEAR, 2013);
    Date fromDate = cal.getTime();
    
    Calendar endCal = Calendar.getInstance();
    endCal.set(Calendar.DATE, 15);
    endCal.set(Calendar.MONTH, 11);
    endCal.set(Calendar.YEAR, 2013);
    Date toDate = endCal.getTime();
    
    List<Date> datesList = new ArrayList<>(25);
    datesList.add(fromDate);
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(fromDate);
    do {
    
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);
    
        if (calendar.getTime().before(toDate)) {
    
            datesList.add(calendar.getTime());
    
            calendar.add(Calendar.MONTH, 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.DATE, 0);
    
            if (calendar.getTime().before(toDate)) {
    
                datesList.add(calendar.getTime());
    
            }
    
        }
    
    } while (calendar.getTime().before(toDate));
    
    datesList.add(toDate);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    for (Date d : datesList) {
        System.out.println(sdf.format(d));
    }
    
    注意:这两个代码段都没有做的一件事是检查列表中的最后一个日期是否实际上是结束日期(尽管从外观上看,您的代码段似乎能够满足这一需要)