2012-01-04 3 views
0

나는이 간단한 방법을 써서 모든 지불 기간의 날짜를 알려주고 1 월 1 일부터 일하는 것을 그만 두었다. 나는 여기서 무엇이 잘못되었는지 정말로 확신하지 못한다. 아무것도 반환하지 않습니다. 귀하의 동안 조건이 충족되지 않는마지막 지불 날짜 찾기

public static List<Date> getPayPeriodDatesSinceStartOfYear() { 

     Calendar cal = new GregorianCalendar(); 
     cal.add(Calendar.WEEK_OF_YEAR, 1); 

     cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
     cal.set(Calendar.WEEK_OF_YEAR, 2); 

     Calendar currentDate = new GregorianCalendar(); 
     currentDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
     int counter = 2; 
     List<Date> dates = new ArrayList<Date>(); 
     while ((cal.getTime().compareTo((currentDate.getTime())) <= 0)) { 
      dates.add(cal.getTime()); 
      counter += 2; 
      cal.set(Calendar.WEEK_OF_YEAR, counter); 
     } 
     java.util.Collections.reverse(dates); 
     if(dates.isEmpty()){ 
      JOptionPane.showMessageDialog(null, "NO DATES, SOMETHING IS WRONG!"); 
     } 
     return dates; 
    } 
+1

실행하면 메시지 대화 상자가 튀어 나옵니까? – Mitch

+0

그래, 내 생각에 내가하고있는 일은 지난해 중반에 일했던 것 같아. – davidahines

+1

'getPayPeriodDatesSinceStartOfYear()' 이름에서 알 수 있듯이 2 주 후에 실행해야한다고 생각합니다. 이후 올해 첫 번째 주간은 아직 지급 기간이 없습니다. –

답변

3

, 당신이 cal 따라서보다 큰 currentDate while 루프가 발생하지 않을 것입니다 설정 한 방법입니다.

1
Calendar cal = new GregorianCalendar(); 
cal.add(Calendar.WEEK_OF_YEAR, 1); 

cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
cal.set(Calendar.WEEK_OF_YEAR, 2); 

왜 주를 1로 설정하고 2로 설정합니까?

(cal.getTime().compareTo((currentDate.getTime())) <= 0) 

Date에 대한 문서를 참조하십시오. 메서드는 before(Date when)after(Date when)입니다.