我在列表中有一堆日期对象(其中20个),我想知道每个日期是否在两个日期间隔之间,即 startdate = 2005-09 和 enddate = 2009-07
如何查看这些条件?
List<DateObject> myDates = new ArrayList<>();
DateObject dates = new DateObject("1990-05-19,");
mydatesDates.add(dates);
dates = new DateObject("2004-07-25");
myDates.add(dates);
......这种模式持续了大约20个日期
答案 0 :(得分:1)
您可以使用流并检查方法Date#before()
和Date#after()
List<Date> myDates = new ArrayList<>();
Date begin = ...//your date here;
Date end = ...//your date here;
List<Date> result = myDates.stream().filter(x -> x.after(begin) && x.before(end)).collect(Collectors.toList());
// now print it
result.forEach(System.out::println);
答案 1 :(得分:1)
LocalDate
使用LocalDate
类来表示没有时间且没有时区的仅限日期的值。
LocalDate ld = LocalDate.parse( "1990-05-19" );
将其收集到List
。
List<LocalDate> dates = new ArrayList<>(); // Pass an initialCapacity argument if you have one.
dates.add( ld ); // Repeat for all your `LocalDate` objects.
YearMonth
为了比较,你似乎只关心年月。您可以使用YearMonth
类。
YearMonth start = YearMonth.of( 2005 , 9 ); // Or pass Month.SEPTEMBER
YearMonth stop = YearMonth.of( 2009, 7 ); // Or pass Month.JULY
循环列表以查看其中任何一个是否过早或过晚。
List<LocalDate> tooEarly = new ArrayList<>();
List<LocalDate> tooLate = new ArrayList<>();
List<LocalDate> justRight = new ArrayList<>();
for (String date : dates) {
YearMonth ym = YearMonth.from( date );
if( ym.isBefore( start ) ) {
tooEarly.add( date );
} else if( ! ym.isBefore( stop ) ) { // Using Half-Open approach where ending is *exclusive*. Use “( ym.isAfter( stop ) )” if you want inclusive ending.
tooLate.add( date );
} else {
justRight.add( date );
}
System.out.println( "ERROR unexpectedly went beyond the if-else-else." );
}