Я пытаюсь написать простую процедуру, которая будет добавлять в Список каждый второй понедельник (каждый день платежного периода) с начала года, что-то странное, но я никогда не работал с Календарем класс раньше, и я думаю, что я могу использовать CompareTo неправильно, но я прочитал Javadoc, и кажется, все в порядке.
пакет javasampleapps;
import java.util.ArrayList;
импорт java.util.Calendar;
импорт java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author DavidH
*/
public class AddingDaysToCalendar {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Calendar cal = new GregorianCalendar();
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
cal.add(Calendar.WEEK_OF_YEAR, 1);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.WEEK_OF_YEAR, 1 + 1);
Calendar currentDate = new GregorianCalendar();
currentDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
int counter = 2;
List<Date> dates = new ArrayList<Date>();
while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
cal.set(Calendar.WEEK_OF_YEAR, counter);
dates.add(cal.getTime());
counter += 2;
}
System.out.println("Listing Dates:");
for (Date d : dates) {
System.out.println(d);
}
}
}
Это выводит это:
39
40
Listing Dates:
Mon Jan 03 13:37:29 AST 2011
Mon Jan 17 13:37:29 AST 2011
Mon Jan 31 13:37:29 AST 2011
Mon Feb 14 13:37:29 AST 2011
Mon Feb 28 13:37:29 AST 2011
Mon Mar 14 13:37:29 ADT 2011
Mon Mar 28 13:37:29 ADT 2011
Mon Apr 11 13:37:29 ADT 2011
Mon Apr 25 13:37:29 ADT 2011
Mon May 09 13:37:29 ADT 2011
Mon May 23 13:37:29 ADT 2011
Mon Jun 06 13:37:29 ADT 2011
Mon Jun 20 13:37:29 ADT 2011
Mon Jul 04 13:37:29 ADT 2011
Mon Jul 18 13:37:29 ADT 2011
Mon Aug 01 13:37:29 ADT 2011
Mon Aug 15 13:37:29 ADT 2011
Mon Aug 29 13:37:29 ADT 2011
Mon Sep 12 13:37:29 ADT 2011
Mon Sep 26 13:37:29 ADT 2011
Почему это добавление самой последней даты? 26 сентября еще даже не произошло.