如何比较一组 LocalDate(假期)是否包含给定的 MonthDay?

How to compare if a set of LocalDate (holidays) contains a given 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) );
            }
        }
}

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