Показывать еженедельные дни месяца

   public static void getWeeksOfMonth(int month, int year)
{
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd-MMM-yyyy");
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, 1);

    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(ndays+"<<<ff" );

    for (int i = 1; i <= ndays; i++)
    {
        String day = sdf.format(cal.getTime());
        System.out.println(day+"<<<" );
        Log.e("quest", day+"<<<");
        if(i % 7 == 0){
            Log.e("question", "=======week days===========");
        }
        cal.add(Calendar.DATE, 1);
    }

}

Выход

Суббота 04-ноя-2017

Воскресенье 05-ноя-2017

Понедельник 06-ноя-2017

Вторник 07-ноя-2017

======= дни недели ===========

Среда 08-ноя-2017

Четверг 09-ноя-2017

Пятница 10 ноября 2017

Суббота, 11 ноября 2017 года

Воскресенье 12-ноя-2017

Понедельник 13-ноя-2017

Вторник, 14 ноября 2017 года

======= дни недели ==========

Среда 15 ноября 2017

Четверг 16 ноября 2017

Пятница 17 ноября 2017

Суббота 18 ноября 2017

Воскресенье 19-ноя-2017

Понедельник 20 ноября 2017

Вторник 21 ноября 2017

======= дни недели ===========

Среда 22 ноября 2017

Четверг, 23 ноября 2017 года

Пятница 24 ноября 2017

Суббота 25 ноября 2017

Воскресенье 26 ноября 2017

Понедельник 27 ноября 2017

Вторник 28 ноября 2017

======= дни недели ===========

Среда 29 ноября 2017

Четверг 30 ноября 2017

1: -Но я хочу завершить на прошлой неделе ср во вторник

2:- начинаются недели с пятницы и заканчиваются четвергом

1 ответ

Используйте java.time

Вы используете ужасные старые классы, которые теперь заменены классами java.time.

YearMonth класс представляет целый месяц.

YearMonth ym = YearMonth.of( 2018 , Month.JANUARY ) ;

Определите свой формат для выходных строк.

Locale locale = Locale.US ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( 
    "EEEE dd-MMM-uuuu" ,
    locale 
) ;

Вместо этого я предлагаю позволить java.time автоматически локализоваться для вас, а не жестко кодировать формат. Для локализации укажите:

  • FormatStyle чтобы определить, насколько длинной или сокращенной должна быть строка.
  • Locale определить:
    • Человеческий язык для перевода названия дня, названия месяца и тому подобное.
    • Культурные нормы, решающие вопросы аббревиатур, заглавных букв, знаков препинания, разделителей и тому подобное.

Определить форматер:

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( 
    FormatStyle.LONG , 
    Locale.CANADA_FRENCH 
) ;

Собрать в List возможно.

int initialCapacity = ym.lengthOfMonth() ;
List< String > outputs = new ArrayList<>( initialCapacity ) ;

Цикл по дням.

for( int i = 1 , i <= ym.lengthOfMonth() ; i ++ ) {
    LocalDate ld = ym.atDay( i ) ;
    String output = ld.format( f ) ;
    outputs.add( output ) ;
}

Чтобы сгруппировать их по дням недели, используйте DayOfWeek ENUM.

DayOfWeek dow = ld.getDayOfWeek() ;
if ( dow.equals( DayOfWeek.WEDNESDAY ) ) { … }

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые классы даты и времени, такие как java.util.Date, Calendar & SimpleDateFormat,

Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, смотрите Oracle Tutorial. И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классы.

Где взять классы java.time?

  • Java SE 8, Java SE 9, Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
  • Android
Другие вопросы по тегам