java.time
java.time.
LocalDate .
DateRange, .
public class DateRange {
public LocalDate start , stop ;
public DateRange ( LocalDate start , LocalDate stop ) {
if(stop.isBefore(start)){
throw new IllegalArgumentException ("The stop date is before the start date." );
}
this.start = start;
this.stop = stop;
}
@Override
public String toString () {
return "DateRange{ " + "start=" + start + ", stop=" + stop + " }";
}
}
.
List<DateRange> ranges = new ArrayList<> ( 3 );
ranges.add ( new DateRange ( LocalDate.of ( 2017 , Month.JANUARY , 17 ) , LocalDate.of ( 2017 , Month.MARCH , 7 ) ) );
ranges.add ( new DateRange ( LocalDate.of ( 2017 , Month.FEBRUARY , 12 ) , LocalDate.of ( 2017 , Month.FEBRUARY , 16 ) ) );
ranges.add ( new DateRange ( LocalDate.of ( 2017 , Month.FEBRUARY , 14 ) , LocalDate.of ( 2017 , Month.MARCH , 25 ) ) );
System.out.println ( "ranges: " + ranges );
, List.
List<LocalDate> dates = new ArrayList<> ( ranges.size () * 2 );
for ( DateRange range : ranges ) {
dates.add ( range.start );
dates.add ( range.stop );
}
. , . , .
Collections.sort ( dates );
, .
List<DateRange> rangesOutput = new ArrayList<> ( dates.size () );
for ( int i = 1 ; i < dates.size () ; i ++ ) {
LocalDate start = dates.get ( i - 1 );
LocalDate stop = dates.get ( i + 1 - 1 );
if ( ! start.equals ( stop ) ) {
DateRange range = new DateRange ( start , stop );
rangesOutput.add ( range );
}
}
System.out.println ( "rangesOutput: " + rangesOutput );
.
: [DateRange {start = 2017-01-17, stop = 2017-03-07}, DateRange {start = 2017-02-12, stop = 2017-02-16}, DateRange {start = 2017- 02-14, stop = 2017-03-25}]
rangeOutput: [DateRange {start = 2017-01-17, stop = 2017-02-12}, DateRange {start = 2017-02-12, stop = 2017-02-14}, DateRange {start = 2017- 02-14, stop = 2017-02-16}, DateRange {start = 2017-02-16, stop = 2017-03-07}, DateRange {start = 2017-03-07, stop = 2017-03-25} ]
IdeOne.com.
java.time
java.time Java 8 . legacy , java.util.Date, Calendar SimpleDateFormat.
Joda-Time, , java.time.
, . Oracle. Qaru . JSR 310.
java.time?
ThreeTen-Extra java.time . java.time. , Interval, YearWeek, YearQuarter .