Как получить следующие n пятниц, которые будут первой, второй или третьей пятницей месяца?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как получить следующие n пятниц, которые будут первой, второй или третьей пятницей месяца?

Сообщение Anonymous »

Мне нужно найти следующие n пятниц, но я хочу исключить 4-ю и, возможно, 5-ю пятницу, т. е. я хочу получить следующие n пятниц, которые являются 1-й, 2-й или 3-й пятницей каждого месяца. Я нашел способ вести трансляцию в следующие n пятниц (например, следующие 10 пятниц):

Код: Выделить всё

LocalDate now = LocalDate.now();
Stream.iterate(now , localDate -> localDate.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)))
.skip(1) // skip today
.limit(10)
.forEach(System.out::println);
Вывод:

Код: Выделить всё

2021-10-22
2021-10-29
2021-11-05
2021-11-12
2021-11-19
2021-11-26
2021-12-03
2021-12-10
2021-12-17
2021-12-24
Но мне нужно исключить, например, 22 октября 2021 г. и 29 октября 2021 г., потому что это 4-я и 5-я пятница октября. Аналогично 2021-11-26 и 2021-12-24, потому что это не 1-я, 2-я или 3-я пятница.
Я искал ТАК и нашел несколько способов. для расчета n-й пятницы месяца, например этой

Код: Выделить всё

public static LocalDate nthFridayOfMonth(LocalDate localDate, int week) {
return localDate.with(TemporalAdjusters.dayOfWeekInMonth(week, DayOfWeek.FRIDAY));
}
который возвращает для заданной даты n-е число пятницы.
Как изменить этот метод, чтобы он возвращал логическое значение, если задана LocalDate это первая, вторая или третья пятница месяца? Или использовать этот метод для реализации другого метода, который делает то, что мне нужно?
В идеале я хочу использовать приведенный выше поток и использовать метод, который возвращает логическое значение в качестве фильтра:

Код: Выделить всё

LocalDate now = LocalDate.now();
Stream.iterate(now , localDate -> localDate.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)))
.skip(1) // skip today
.filter(d -> is1st2ndOr3rdFriday(d))
.limit(10)
.forEach(System.out::println);
чтобы получить

Код: Выделить всё

2021-11-05
2021-11-12
2021-11-19
2021-12-03
2021-12-10
2021-12-17
2022-01-07
2022-01-14
2022-01-21
2022-02-04
Как реализовать логический метод фильтра is1st2ndOr3rdFriday(LocalDate d) {?


Подробнее здесь: https://stackoverflow.com/questions/696 ... day-in-a-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»