Как сравнить, содержит ли набор LocalDate (праздники) заданный MonthDay? - PullRequest
1 голос
/ 21 июня 2020

Как мне вычленить monthDay из LocalDate? Мне нужно решить эту проблему в течение завтрашнего дня, поэтому любая помощь будет оценена в ближайшее время!

private final Set<MonthDay> recurringHolidays = new HashSet<>();
private final Set<LocalDate> holidays = new HashSet<>();


public void setHoliday(final LocalDate date) {
     holidays.add( date );
}

public void setHolidayIfIsRecurring() {

    for (LocalDate holidayLocalDate: getHolidays())
        for (MonthDay monthDay: getRecurringHolidays()){
            
            LocalDate monthdayToLocalDate = monthDay -------------????
            
            if (!setOfHolidays().contains( monthdayToLocalDate ) ){
                setHoliday( (monthDay) );
            }
        }
}

1 Ответ

1 голос
/ 21 июня 2020

LocalDateMonthDay

Вы можете использовать MonthDay#from(TemporalAccessor). Например:

import java.time.LocalDate;
import java.time.MonthDay;

public class Main {

  public static void main(String[] args) {
    LocalDate date = LocalDate.of(2020, 6, 20);
    MonthDay md = MonthDay.from(date);
    System.out.println(md);
  }
}

Это выведет:

--6-20

MonthDayLocalDate

Проблема здесь в том, что MonthDay, очевидно, представляет только месяц и день месяца , тогда как LocalDate дополнительно обозначает год . Вам нужно решить, как определить, какой год использовать. Как только вы это узнаете, тогда два варианта:

Например:

import java.time.LocalDate;
import java.time.MonthDay;
import java.time.Year;

public class Main {

  public static void main(String[] args) {
    MonthDay md = MonthDay.of(6, 20);
    Year year = Year.of(2020);
    
    LocalDate date1 = md.atYear(year.getValue());
    LocalDate date2 = year.atMonthDay(md);

    System.out.println(date1);
    System.out.println(date2);
  }
}

Это выведет:

2020-06-20
2020-06-20
...