如何在Java中获取两个日期之间的日期列表

88
  • 我需要一个包括起始日期和结束日期在内的日期列表。
  • 结果应该是一个包含所有日期的列表,包括起始日期和结束日期。

1
LocalDate.datesUntil() - ZhekaKozlov
1
对于那些使用Groovy(使用LocalDate)的人:(fromDate..toDate).each { println it } - lepe
24个回答

0

增强上述解决方案。因为将结束日期加1天有时会超过结束日期一个额外的天数。

    public static List getDaysBetweenDates(Date startdate, Date enddate)
    {
        List dates = new ArrayList();
        Calendar startDay = new GregorianCalendar();
        calendar.setTime(startdate);
        Calendar endDay = new GregorianCalendar();
        endDay.setTime(enddate);
        endDay.add(Calendar.DAY_OF_YEAR, 1);
        endDay.set(Calendar.HOUR_OF_DAY, 0);
        endDay.set(Calendar.MINUTE, 0);
        endDay.set(Calendar.SECOND, 0);
        endDay.set(Calendar.MILLISECOND, 0);
while (calendar.getTime().before(endDay.getTime())) { Date result = startDay.getTime(); dates.add(result); startDay.add(Calendar.DATE, 1); } return dates; }

0

这是我获取两个日期之间的日期的方法,包括/不包括工作日。它还将源日期和目标日期格式作为参数。

public static List<String> getAllDatesBetweenTwoDates(String stdate,String enddate,String givenformat,String resultformat,boolean onlybunessdays) throws ParseException{
        DateFormat sdf;
        DateFormat sdf1;
        List<Date> dates = new ArrayList<Date>();
        List<String> dateList = new ArrayList<String>();
          SimpleDateFormat checkformat = new SimpleDateFormat(resultformat); 
          checkformat.applyPattern("EEE");  // to get Day of week
        try{
            sdf = new SimpleDateFormat(givenformat);
            sdf1 = new SimpleDateFormat(resultformat);
            stdate=sdf1.format(sdf.parse(stdate));
            enddate=sdf1.format(sdf.parse(enddate));

            Date  startDate = (Date)sdf1.parse( stdate); 
            Date  endDate = (Date)sdf1.parse( enddate);
            long interval = 24*1000 * 60 * 60; // 1 hour in millis
            long endTime =endDate.getTime() ; // create your endtime here, possibly using Calendar or Date
            long curTime = startDate.getTime();
            while (curTime <= endTime) {
                dates.add(new Date(curTime));
                curTime += interval;
            }
            for(int i=0;i<dates.size();i++){
                Date lDate =(Date)dates.get(i);
                String ds = sdf1.format(lDate);   
                if(onlybunessdays){
                    String day= checkformat.format(lDate); 
                    if(!day.equalsIgnoreCase("Sat") && !day.equalsIgnoreCase("Sun")){
                          dateList.add(ds);
                    }
                }else{
                      dateList.add(ds);
                }

                //System.out.println(" Date is ..." + ds);

            }


        }catch(ParseException e){
            e.printStackTrace();
            throw e;
        }finally{
            sdf=null;
            sdf1=null;
        }
        return dateList;
    }

方法调用将会是这样的:

public static void main(String aregs[]) throws Exception {
        System.out.println(getAllDatesBetweenTwoDates("2015/09/27","2015/10/05","yyyy/MM/dd","dd-MM-yyyy",false));
    }

您可以找到演示代码:点击这里


0
List<LocalDate> totalDates = new ArrayList<>();
popularDatas(startDate, endDate, totalDates);
System.out.println(totalDates);

private void popularDatas(LocalDate startDate, LocalDate endDate, List<LocalDate> datas) {
    if (!startDate.plusDays(1).isAfter(endDate)) {
        popularDatas(startDate.plusDays(1), endDate, datas);
    } 
    datas.add(startDate);
}

递归解决方案


0
这是如何在Clojure中获取两个日期之间的日期列表的方法:
(loop [current-date from-date
                end-date to-date
                days []]
           (if (time/before? current-date end-date)
             (recur (time/plus current-date (time/days 1)) end-date
               (conj days current-date))
             days))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接