2012-01-04 158 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 2012-01-04 19:14:27

+0

是的,它弹出来了,我想我所做的只是在去年年中工作。 – davidahines 2012-01-04 19:24:39

+1

'getPayPeriodDatesSinceStartOfYear()'。顾名思义,我认为你必须在第二周后运行它。因为,这是第一周,今年还没有支付期。 – 2012-01-04 19:27:22

回答

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)的方法。

相关问题