Как получить дату, указав неделю месяца и день недели

Как получить дату, указав неделю месяца и день недели.

Пример: если мне нужен третий вторник ноября 2018 года.

Неделя месяца: 3, День недели: 3

Ожидаемая дата: 20 ноября 2018

Но значение, которое мы получаем: 13 ноября 2018. Так как день начала месяца (четверг) меньше, чем ожидаемый день (вторник).

   Calendar calendar = Calendar.getInstance();  
   calendar.set(Calendar.YEAR,2018 );  
   calendar.set(Calendar.MONTH, 10);  
   calendar.set(Calendar.WEEK_OF_MONTH, 3);  
   calendar.set(Calendar.DAY_OF_WEEK, 3);  
   System.out.println("Time " + calendar.getTime());

Как я могу получить правильную дату?

3 ответа

Если вы используете Java 8, вы можете сделать это,

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Main {
    public static void main(String[] args) {
        LocalDate input = LocalDate.now();
        int ordinal = 3;
        DayOfWeek weekday = DayOfWeek.THURSDAY;
        TemporalAdjuster ta = TemporalAdjusters.dayOfWeekInMonth(ordinal, weekday) ;
        LocalDate adjusted = input.with( ta );
        System.out.println(adjusted.toString());
    }

}

Я взял это отсюда, и есть другие способы сделать это по данной ссылке.

Если вы хотите использовать календарь, то:

int year = 2018;
int month = 10;  // zero based November

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
System.out.println(calendar.getTime());

Вы можете использовать следующий код:

LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.TUESDAY));

Это выведет:

2018-11-20

Более подробную информацию можно найти в документации по Java здесь

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