java.time.LocalDate范围内的生日

问题描述 投票:0回答:2

我正在尝试从java.time.LocalDate的集合中选择生日(与年份无关)。为什么选择LocalDate?因为这种类型似乎最适合生日。

假设我想过滤3月6日至4月30日之间的生日,而不考虑年份。怎么做?

如果要这样做,我将在LocalDate中替换年份,并使用方法isAfterisBefore。我必须更改年份的事实只是一个简单的错误。或我使用了错误的数据类型(LocalDate)

java localdate java.time
2个回答
2
投票

我宁愿使用类型为MonthDay的类型,它是“无年日期”,并且也具有可比性,并提供诸如isAfter()isBefore()的方法。此外,可以使用方法MonthDayLocalDate扩展为atYear(int)

如果您坚持使用LocalDate,则只能使用leap年,否则2月29日将是一个问题。


0
投票
List<LocalDate> birthdays = Arrays.asList(
        LocalDate.of(1990, Month.JANUARY, 5),
        LocalDate.of(1992, Month.MARCH, 7),
        LocalDate.of(1995, Month.MAY, 5));
MonthDay filterFrom = MonthDay.of(Month.MARCH, 6);
MonthDay filterTo = MonthDay.of(Month.APRIL, 30);

List<LocalDate> filteredDates = birthdays.stream()
        .filter(date -> {
            MonthDay md = MonthDay.from(date);
            return md.compareTo(filterFrom) >= 0 && md.compareTo(filterTo) <= 0;
        })
        .collect(Collectors.toList());

System.out.println(filteredDates);
© www.soinside.com 2019 - 2024. All rights reserved.