net.intelie.pipes.time.DateSpan Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
package net.intelie.pipes.time;
import net.intelie.pipes.util.DSTHelper;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Locale;
import java.util.Objects;
public class DateSpan extends TimeSpanBase {
private static final long serialVersionUID = 1L;
private final long start, end;
private final int year;
private final int month;
private final int day;
private final int hour;
private final int minute;
private final int second;
private final PeriodUnit span;
public DateSpan(int year, int month, int day, int hour, int minute, int second, PeriodUnit span, ZoneId zone) {
super(pad(year, 4) +
(PeriodUnit.MONTH.compareTo(span) >= 0 ? "-" + pad(month, 2) : "") +
(PeriodUnit.DAY.compareTo(span) >= 0 ? "-" + pad(day, 2) : "") +
(PeriodUnit.HOUR.compareTo(span) >= 0 ? " " + pad(hour, 2) : "") +
(PeriodUnit.MINUTE.compareTo(span) >= 0 ? ":" + pad(minute, 2) : "") +
(PeriodUnit.SECOND.compareTo(span) >= 0 ? ":" + pad(second, 2) : ""));
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minute = minute;
this.second = second;
this.span = span;
PeriodBase adder = span.create(1, zone);
LocalDateTime local = LocalDateTime.of(year, month, day, hour, minute, second);
local = DSTHelper.nextValid(local, zone);
this.start = adder.floor(ZonedDateTime.of(local, zone).toInstant().toEpochMilli());
this.end = adder.add(start);
}
@Override
public DateSpan forceZone(ZoneId zone) {
return new DateSpan(year, month, day, hour, minute, second, span, zone);
}
private static String pad(int v, int length) {
return String.format((Locale) null, "%0" + length + "d", v);
}
@Override
public long start(long reference) {
return start;
}
@Override
public long end(long reference) {
return end;
}
@Override
public boolean isFixed() {
return true;
}
@Override
public boolean isPoint() {
return false;
}
@Override
public boolean includesPresent() {
return false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof DateSpan)) return false;
DateSpan that = (DateSpan) o;
return Objects.equals(this.start, that.start) &&
Objects.equals(this.end, that.end);
}
@Override
public int hashCode() {
return Objects.hash(this.start, end);
}
}