Как рассчитать количество понедельников с начала этого года? - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь написать простую процедуру, которая будет добавлять в Список каждый второй понедельник (каждый день платежного периода) с начала года, что-то странное, но я никогда не работал с Календарем класс раньше, и я думаю, что я могу использовать 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 сентября еще даже не произошло.

1 Ответ

4 голосов
/ 20 сентября 2011

Почему он добавляет самую последнюю дату?26 сентября еще даже не произошло.

Поскольку вы продвигаете дату после , вы проверяете ее отношение к текущему времени, а до добавляете ее.к списку:

 while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
     cal.set(Calendar.WEEK_OF_YEAR, counter);
     dates.add(cal.getTime());
     counter += 2;
 }

Это должно решить эту проблему (может привести и к другим):

 while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
     dates.add(cal.getTime());
     counter += 2;
     cal.set(Calendar.WEEK_OF_YEAR, counter);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...