java.time.LocalDate范围内的生日
Birthdays in the scope of java.time.LocalDate
我正在尝试 select 生日(独立于年份)在 java.time.LocalDate
的集合中。为什么是本地日期?因为这个好像最适合过生日
假设我想过滤 3 月 6 日到 4 月 30 日之间的生日,而不考虑年份。
如何做到这一点?
如果我要这样做,我会替换 LocalDate 中的年份并使用方法 isAfter
和 isBefore
。
我必须更改年份的事实只是一个简单的技巧。或者我使用了错误的数据类型 (LocalDate)
我宁愿使用 MonthDay 类型,它是 "date-without-year",它也具有可比性,并提供 isAfter()
或 isBefore()
等方法。此外,可以使用 atYear(int)
.
方法将 MonthDay
扩展为 LocalDate
如果您坚持 LocalDate
那么您应该只使用闰年,否则 2 月 29 日将是一个问题。
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);
我正在尝试 select 生日(独立于年份)在 java.time.LocalDate
的集合中。为什么是本地日期?因为这个好像最适合过生日
假设我想过滤 3 月 6 日到 4 月 30 日之间的生日,而不考虑年份。 如何做到这一点?
如果我要这样做,我会替换 LocalDate 中的年份并使用方法 isAfter
和 isBefore
。
我必须更改年份的事实只是一个简单的技巧。或者我使用了错误的数据类型 (LocalDate)
我宁愿使用 MonthDay 类型,它是 "date-without-year",它也具有可比性,并提供 isAfter()
或 isBefore()
等方法。此外,可以使用 atYear(int)
.
MonthDay
扩展为 LocalDate
如果您坚持 LocalDate
那么您应该只使用闰年,否则 2 月 29 日将是一个问题。
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);