Java日期对象列表间隔检查

时间:2016-10-18 20:16:33

标签: java list date intervals

我在列表中有一堆日期对象(其中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个日期

2 个答案:

答案 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." ); 
}