2013-12-15 3 views
1

내가주어진 날짜 사이의 달의 날짜와 종료 날짜를 시작

전 그때 엔, 지정된 날짜 범위 사이의 날짜 목록을 만들고 싶어 범위를 얻으려면 : FROMDATE - 15/10/2013 및 TODATE을 - (15)/2,013

/12 지금 목록되어야

[15/10/2013, 31/10/2013, 2013년 1월 1일, 30/11/2013, 2013년 1월 12일 15/12/2013]

이 코드를 작성했습니다.

private List<Date> datesList = new ArrayList<Date>(); 

public void findLastDate(){ 
Date lastDateOfMonth; 
Date firstDateOfNextMonth = null; 

datesList.add(fromDate); 

do { 

Calendar calendar = Calendar.getInstance(); 
if(firstDateOfNextMonth == null){ 
    calendar.setTime(fromDate); 
} else { 
     calendar.setTime(firstDateOfNextMonth); 
} 

calendar.add(Calendar.MONTH, 1); 
calendar.set(Calendar.DAY_OF_MONTH, 1); 
calendar.add(Calendar.DATE, -1); 

    lastDateOfMonth = calendar.getTime(); 

    datesList.add(lastDateOfMonth); 

    Calendar calendar2 = Calendar.getInstance(); 
    calendar2.setTime(lastDateOfMonth); 

    calendar2.add(Calendar.MONTH, 1); 
    calendar2.set(Calendar.DAY_OF_MONTH, 1); 
    calendar2.add(Calendar.DATE, 0); 

    firstDateOfNextMonth = calendar2.getTime(); 

    datesList.add(firstDateOfNextMonth); 

} while(firstDateOfNextMonth.compareTo(toDate) < 0); 

datesList.add(toDate); 

    System.out.println("List of dates " + datesList); 

}

하지만 난

[15/10/2013, 31/10/2013, 2013년 1월 1일, 30/11/2013, 2013년 1월 12일으로 목록을 얻고있다 2012 년 1 월 1 일, 2013 년 1 월 1 일, 2014 년 1 월 1 일, 15/12/2013]

2012 년 1 월 12 일 3014 년 1 월 1 일이 목록에 없어야하므로 while 루프 내가 PLZ 도움이 점점 안해 ...

답변

1

기본적으로, 당신은 2 가지 일을해야합니다.

  1. addCalendar에 값 후에는 목록
  2. 에서 마지막 날짜를 제거, 그것은 결국 시간과 동일 아니라면 즉 이제 종료 시간 및
  3. after 있는지 확인해야 예

    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)); 
    } 
    

    윌 출력

이러한 코드 조각 중 어느 것도 한 가지는 것을 :

15/10/2013 
31/10/2013 
01/11/2013 
30/11/2013 
01/12/2013 
15/12/2013 

15/10/2013 
31/10/2013 
01/11/2013 
30/11/2013 
01/12/2013 
15/12/2013 

주 ... 원래 코드 출력

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)); 
} 

에 따라, 예와 업데이트 목록에서 마지막 날짜가 실제로 종료 날짜인지 확인하는 것입니다 (보기에는 보이지만 요 urs가이 필요성을 극복 할 수있을 것 같습니다.)

관련 문제