Вывод дней недели Дня рождений

Программа должна выводить какой день недели был каждой год если считать (что день рождение было 21 день месяца 5 месяц 2014 год) если добавить то что закоменнтировал то вообще возвращает пустую строку,если оставляю выводит почему то всё время 12 месяц...Не понимаю в чем проблема, хотя до этого делаю проверку sout и выводит ту что передал.

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Main {

 public static void main(String[] args) {

    int day = 21;
    int month = 5;
    int year = 2014;

    System.out.println(collectBirthdays(year, month, day));

}

public static String collectBirthdays(int year, int month, int day) {
    StringBuilder builder = new StringBuilder();
    SimpleDateFormat format = new SimpleDateFormat("0 - dd.hh.yyyy - EE", Locale.ENGLISH);
    Calendar calendar = new GregorianCalendar(year, month, day, 0, 0, 0);
    Calendar calendar2 = new GregorianCalendar();
    month--;
    if (month == -1) {
        month = 0;
    }
    System.out.println(calendar.getTime());
    System.out.println(calendar2.getTime());
    if (calendar2.getTimeInMillis() == calendar.getTimeInMillis()) {
        builder.append(format.format(calendar.getTime())).append("\n");
        return builder.toString();
    }
    //        if (calendar2.getTimeInMillis() > calendar.getTimeInMillis()) {
    //return builder.append("").toString();
    //  }

    for (int i = 0; calendar.getTimeInMillis() <= calendar2.getTimeInMillis(); i++) {
        builder.append(format.format(calendar.getTime())).append("\n");
        calendar.add(Calendar.YEAR, 1);
    }
    return builder.toString();
  }
}

Ответы (2 шт):

Автор решения: Николай

я тоже сейчас на этом уровне. Мне кажется, Ваше решение очень трудночитаемо. Я пока решил так, но у меня две ошибки, и я думаю ошибки в тесте.

   public static String collectBirthdays(int year, int month, int day) {
        month -= 1;
        String birthDay = "";
        int countNumbers = 0;
        Date hereDate = new Date();
        DateFormat dataFormat = new SimpleDateFormat(" - dd.MM.yyyy - E", Locale.ENGLISH);
        Calendar calendar = new GregorianCalendar(year, month, day);
        Date birthDate = calendar.getTime();
        while (!birthDate.after(hereDate)) {
            birthDay += countNumbers + dataFormat.format(birthDate) + System.lineSeparator();
            calendar.add(Calendar.YEAR, +1);
            birthDate = calendar.getTime();
            countNumbers++;
        }
        return birthDay;
    }   
→ Ссылка
Автор решения: deadu
    public static String collectBirthdays(int year, int month, int day) {
        StringBuilder builder = new StringBuilder();
        SimpleDateFormat format = new SimpleDateFormat(" - dd.MM.yyyy - EE", Locale.ENGLISH);
        Calendar calendar = new GregorianCalendar(year, month - 1, day, 0, 0, 0);
        Calendar today = Calendar.getInstance();
        int number = 0;
        while (calendar.before(today)) {
            builder.append(number).append(format.format(calendar.getTime())).append("\n");
            calendar.add(Calendar.YEAR, 1);
            number++;
        }
    return builder.toString();
    }
→ Ссылка