Как получить дату, указав неделю месяца и день недели
Как получить дату, указав неделю месяца и день недели.
Пример: если мне нужен третий вторник ноября 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 здесь