Как получить конкретный день с января по декабрь

Я новичок в java, и я пытаюсь получить весь 7-й день в 2009 году. Я немного смущен тем, как это сделать. Ниже мой код

public class Main {

    public static void main(String[] args) {
        System.out.println("WELCOME TO MY CALENDER CLASS");

        Calendar calendar = Calendar.getInstance();

        calendar.set(DAY_OF_MONTH,7);
        calendar.set(Calendar.YEAR,2009);

        for(int i =1; i <= 12; i++){
            calendar.set(DAY_OF_MONTH,i);
            System.out.println(calendar.getTime());
        }
    }
}

Обновление: это ниже мой результат

Sun Mar 01 23:41:14 GMT 2009 
Mon Mar 02 23:41:14 GMT 2009 
Tue Mar 03 23:41:14 GMT 2009 
Wed Mar 04 23:41:14 GMT 2009 
Thu Mar 05 23:41:14 GMT 2009 
Fri Mar 06 23:41:14 GMT 2009 
Sat Mar 07 23:41:14 GMT 2009 
Sun Mar 08 23:41:14 GMT 2009 
Mon Mar 09 23:41:14 GMT 2009 
Tue Mar 10 23:41:14 GMT 2009 
Wed Mar 11 23:41:14 GMT 2009 
Thu Mar 12 23:41:14 GMT 2009

какую версию Java вы используете?

Laksitha Ranasingha 19.03.2019 00:25

Есть ли проблема с вашим кодом?

shmosel 19.03.2019 00:29

Пожалуйста, точно опишите, чего вы пытаетесь достичь и почему предоставленный вами код не работает так, как вы ожидали. Пробовали ли вы просмотреть свой код в отладчике, чтобы увидеть, где он отличается от ожидаемых результатов?

Jason 19.03.2019 00:31

Java версии 11.02 @LaksithaRanasingha

Edem Robin 19.03.2019 00:33

Я хочу получить весь 7-й день 2009 года @Jason

Edem Robin 19.03.2019 00:35

@EdemRobin мы знаем, что вы хотите получить все 7-е место в 2009 году. Вы также можете попробовать описать результат вашего текущего кода.

howie 19.03.2019 00:37

@EdemRobin Вы имеете в виду «каждый 7-й день в году» или «7-й день каждого месяца в году»?

MadProgrammer 19.03.2019 00:37

В цикле вы устанавливаете DAY_OF_MONTH вместо MONTH (который, кстати, начинается с 0).

Michael Butscher 19.03.2019 00:38

7-го числа каждого месяца в году @MadProgrammer

Edem Robin 19.03.2019 00:40

@howie Ниже приведен мой результат Вс 01 марта 23:41:14 GMT 2009 Пн 02 марта 23:41:14 GMT 2009 Вт 03 марта 23:41:14 GMT 2009 Ср 04 марта 23:41:14 GMT 2009 Чт 05 марта 23:41:14 GMT 2009 Пт 06 мар 23:41:14 GMT 2009 Сб 07 мар 23:41:14 GMT 2009 Вс 08 мар 23:41:14 GMT 2009 Пн 09 мар 23:41:14 GMT 2009 Вт 10 мар 23:41:14 GMT 2009 Ср 11 марта 23:41:14 GMT 2009 Чт 12 марта 23:41:14 GMT 2009

Edem Robin 19.03.2019 00:42

Итак, вы хотите 7 января, 7 февраля... 7 декабря?

howie 19.03.2019 00:45

Спасибо @MichaelButscher за указание на мою ошибку. Я меняю DAT_OF_MONTH на MONTH, и это работает.

Edem Robin 19.03.2019 00:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
12
72
2

Ответы 2

Хорошо, если вы начинаете с 1 января, вот простой пример для вашего дела. Надеюсь, код Java1.8 вам понятен.

public static void main(String[] args) {
        // create two localdate start of a year instances, one for current year and one for next year, 2009 and 2010 respectively
        LocalDate thisYear = LocalDate.of(2009, Month.JANUARY, 1);
        LocalDate nextYear = LocalDate.of(2010, Month.JANUARY, 1);
        // used only for counting number of every seventh day in a year
        int i=0;
        // while we are not in the next year, 2010
        while (thisYear.isBefore(nextYear)) {
            i++;
            // print current date
            System.out.println(i+" " + thisYear.toString());
            // add a week or seven days to our thisYear instance and loop thru again
            thisYear = thisYear.plusWeeks(1);
        }

    }

Проблема с вашим кодом заключается в том, что в цикле for вы устанавливаете день, а не месяц для объекта Calendar.
Итак, измените это:

for(int i = 0; i < 12; i++){
    calendar.set(Calendar.MONTH, i);
    System.out.println(calendar.getTime());
}

Цикл начинается с 0 и доходит до 11, потому что месяцы отсчитываются от 0.
Если вы можете использовать LocalDate, ваш код будет намного проще и эффективнее:

System.out.println("WELCOME TO MY CALENDER CLASS");

LocalDate date;
for(int i = 1; i <= 12; i++){
    date = LocalDate.of(2009, Month.of(i), 7);
    System.out.println(date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)));
}

Другие вопросы по теме