2015-11-30 2 views
0

В соответствии с условиями проблемы необходимо привести к имени таблицы и количеству дней недели (кроме воскресений) каждый месяц и год, который пользователь выбрал в поле со списком с именами и номерами от месяца года. Я нашел решение:Использование Calendar в java

public static List<String> getWeekDays(int year, int month) 
{ 
    List<String> weekDays = new ArrayList<>(); 

Calendar calendar = Calendar.getInstance(); 
calendar.set(year, month, 1); 
int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
while (--max >= 0) 
    { 
     switch (calendar.get(Calendar.DAY_OF_WEEK)) 
     { 
      case Calendar.MONDAY: 
       weekDays.add("Пн#"+ Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.TUESDAY: 
       weekDays.add("Вт#"+ Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.WEDNESDAY: 
       weekDays.add("Ср#"+ Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.THURSDAY: 
       weekDays.add("Чт#"+ Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.FRIDAY: 
       weekDays.add("Пт#"+Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.SATURDAY: 
       weekDays.add("Сб#"+ Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
     } 
     calendar.add(Calendar.DAY_OF_MONTH, 1); 
} 
    return weekDays; 
} 

но он отображает только текущий месяц. Попытка изменить его ежемесячно calendar.add (Calendar.MONTH, 1); но проявляет ерунду, что в ноябре 2015 года на 31 день и месяц начинается во вторник.

calendar.set(Calendar.YEAR, year); 
    System.out.println(" Date with month changed : " + sdfY.format(calendar.getTime())); 
    calendar.set(Calendar.MONTH, month-1); 
    System.out.println(" Date with month changed : " + sdfM.format(calendar.getTime())); 
    System.out.println(calendar.getFirstDayOfWeek()); 
    calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); 

В этой части отображается правильные данные в месяц в ноябре 2015 года, в первый день недели номер 2. Но цикл по какой-то причине начинает отсчет с понедельника 30.

for(int i = 0; i <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); i++) 
    { 
     switch (calendar.get(Calendar.DAY_OF_WEEK)) 
     { 
      case Calendar.MONDAY: 
       weekDays.add("Пн#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.TUESDAY: 
       weekDays.add("Вт#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.WEDNESDAY: 
       weekDays.add("Ср#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.THURSDAY: 
       weekDays.add("Чт#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.FRIDAY: 
       weekDays.add("Пт#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
      case Calendar.SATURDAY: 
       weekDays.add("Сб#" 
       + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
        break; 
     } 
     calendar.add(Calendar.DAY_OF_MONTH, 1); 
} 

ответ

-2

Может кому-то нужно

for(int i = 1; i <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); i++) 
     { 
      calendar.set(Calendar.DAY_OF_MONTH, i); 
      switch (calendar.get(Calendar.DAY_OF_WEEK)) 
      { 
       case Calendar.MONDAY: 
        weekDays.add("Пн#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
       case Calendar.TUESDAY: 
        weekDays.add("Вт#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
       case Calendar.WEDNESDAY: 
        weekDays.add("Ср#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
       case Calendar.THURSDAY: 
        weekDays.add("Чт#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
       case Calendar.FRIDAY: 
        weekDays.add("Пт#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
       case Calendar.SATURDAY: 
        weekDays.add("Сб#" 
        + Integer.toString(calendar.get(Calendar.DAY_OF_MONTH))); 
         break; 
      } 
    }