ucar.nc2.time.CalendarDateRange Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of netcdf Show documentation
Show all versions of netcdf Show documentation
The NetCDF-Java Library is a Java interface to NetCDF files,
as well as to many other types of scientific data formats.
The newest version!
package ucar.nc2.time;
import net.jcip.annotations.Immutable;
import org.joda.time.DateTime;
import ucar.nc2.units.DateRange;
import java.util.Date;
/**
* A range of CalendarDates.
*
* @author caron
* @since 3/21/11
*/
@Immutable
public class CalendarDateRange {
private final CalendarDate start, end;
private final DateTime startDt, endDt;
private final Calendar cal;
static public CalendarDateRange of(CalendarDate start, CalendarDate end) {
return new CalendarDateRange(start, end);
}
static public CalendarDateRange of(Date start, Date end) {
return new CalendarDateRange(CalendarDate.of(start), CalendarDate.of(end));
}
private CalendarDateRange(CalendarDate start, CalendarDate end) {
this.start = start;
this.end = end;
this.startDt = start.getDateTime();
this.endDt = end.getDateTime();
this.cal = start.getCalendar();
assert this.cal == end.getCalendar();
}
public CalendarDateRange(CalendarDate start, long durationInSecs) {
this.start = start;
this.end = start.add((int) durationInSecs, CalendarPeriod.Field.Second );
this.startDt = start.getDateTime();
this.endDt = end.getDateTime();
this.cal = start.getCalendar();
}
public CalendarDate getStart() {
return start;
}
public CalendarDate getEnd() {
return end;
}
public long getDurationInSecs() {
return (endDt.getMillis() - startDt.getMillis()) / 1000;
}
// LOOK
public CalendarDuration getDuration() {
return null;
}
// LOOK
public CalendarDuration getResolution() {
return null;
}
public boolean intersects(CalendarDateRange o) {
return intersects(o.getStart(), o.getEnd());
}
public boolean intersects(CalendarDate start, CalendarDate end) {
if (startDt.isAfter(end.getDateTime())) return false;
if (endDt.isBefore(start.getDateTime())) return false;
return true;
}
public boolean includes(CalendarDate cd) {
DateTime dt = cd.getDateTime();
if (startDt.isAfter(dt)) return false;
if (endDt.isBefore(dt)) return false;
return true;
}
public CalendarDateRange intersect(CalendarDateRange clip) {
DateTime cs = clip.getStart().getDateTime();
DateTime s = startDt.isBefore(cs) ? cs : startDt; // later one
DateTime ce = clip.getEnd().getDateTime();
DateTime e = endDt.isBefore(ce) ? endDt : ce; // earlier one
return CalendarDateRange.of(CalendarDate.of(cal, s), CalendarDate.of(cal, e));
}
public CalendarDateRange extend(CalendarDateRange other) {
DateTime cs = other.getStart().getDateTime();
DateTime s = startDt.isBefore(cs) ? startDt : cs; // earlier one
DateTime ce = other.getEnd().getDateTime();
DateTime e = endDt.isBefore(ce) ? ce : endDt; // later one
return CalendarDateRange.of(CalendarDate.of(cal, s), CalendarDate.of(cal, e));
}
public boolean isPoint() {
return start.equals(end);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append(start).append(" - ").append(end);
return sb.toString();
}
///////////////////////////////////////////////
/**
* Does not handle non-standard calendars
* @deprecated
*/
static public CalendarDateRange of(DateRange dr) {
if (dr == null) return null;
return CalendarDateRange.of( dr.getStart().getDate(), dr.getEnd().getDate());
}
/**
* Does not handle non-standard calendars
* @deprecated
*/
public DateRange toDateRange() {
return new DateRange(start.toDate(), end.toDate());
}
}