
org.opentripplanner.model.calendar.openinghours.OHCalendar Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.model.calendar.openinghours;
import java.io.Serializable;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Objects;
import org.opentripplanner.framework.tostring.ToStringBuilder;
public class OHCalendar implements Serializable {
private final ZoneId zoneId;
private final List openingHours;
private final LocalDate startOfCalendar;
private final LocalDate endOfCalendar;
public OHCalendar(
LocalDate startOfCalendar,
LocalDate endOfCalendar,
ZoneId zoneId,
List openingHours
) {
this.startOfCalendar = startOfCalendar;
this.endOfCalendar = endOfCalendar;
this.zoneId = zoneId;
this.openingHours = openingHours;
}
public boolean isOpen(long timeEpochSecond) {
ZonedDateTime searchDateTime = Instant.ofEpochSecond(timeEpochSecond).atZone(zoneId);
LocalDate searchDate = searchDateTime.toLocalDate();
int daysFromStart = (int) ChronoUnit.DAYS.between(startOfCalendar, searchDate);
int daysUntilEnd = (int) ChronoUnit.DAYS.between(searchDate, endOfCalendar);
if (daysFromStart < 0 || daysUntilEnd < 0) {
return false;
}
int secondsFromMidnight = searchDateTime.toLocalTime().toSecondOfDay();
return openingHours
.stream()
.anyMatch(openingHoursDefinition ->
openingHoursDefinition.isOpen(daysFromStart, secondsFromMidnight)
);
}
@Override
public int hashCode() {
return Objects.hash(zoneId, openingHours, startOfCalendar, endOfCalendar);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final OHCalendar that = (OHCalendar) o;
return (
openingHours.equals(that.openingHours) &&
zoneId.equals(that.zoneId) &&
startOfCalendar.equals(that.startOfCalendar) &&
endOfCalendar.equals(that.endOfCalendar)
);
}
@Override
public String toString() {
return ToStringBuilder
.of(OHCalendar.class)
.addObj("zoneId", zoneId)
.addCol("openingHours", openingHours)
.toString();
}
public List openingHours() {
return openingHours;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy