39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package de.ph87.data.series;
|
|
|
|
import lombok.*;
|
|
|
|
import java.time.*;
|
|
import java.time.temporal.*;
|
|
import java.util.function.*;
|
|
|
|
public enum Alignment {
|
|
FIVE(Duration.ofMinutes(5), t -> t.truncatedTo(ChronoUnit.MINUTES).minusMinutes(t.getMinute() % 5), (t, a) -> t.plusMinutes(5 * a)),
|
|
HOUR(Duration.ofHours(1), t -> t.truncatedTo(ChronoUnit.HOURS), ZonedDateTime::plusHours),
|
|
DAY(Duration.ofDays(1), t -> t.truncatedTo(ChronoUnit.DAYS), ZonedDateTime::plusDays),
|
|
WEEK(Duration.ofDays(7), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfWeek().getValue() - 1), ZonedDateTime::plusWeeks),
|
|
MONTH(Duration.ofDays(31), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfMonth() - 1), ZonedDateTime::plusMonths),
|
|
YEAR(Duration.ofDays(366), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfYear() - 1), ZonedDateTime::plusYears),
|
|
;
|
|
|
|
@NonNull
|
|
public final Duration maxDuration;
|
|
|
|
@NonNull
|
|
public final Function<ZonedDateTime, ZonedDateTime> align;
|
|
|
|
@NonNull
|
|
public final BiFunction<ZonedDateTime, Long, ZonedDateTime> plus;
|
|
|
|
Alignment(@NonNull final Duration maxDuration, @NonNull final Function<@NonNull ZonedDateTime, @NonNull ZonedDateTime> align, @NonNull final BiFunction<@NonNull ZonedDateTime, @NonNull Long, @NonNull ZonedDateTime> plus) {
|
|
this.maxDuration = maxDuration;
|
|
this.align = align;
|
|
this.plus = plus;
|
|
}
|
|
|
|
@NonNull
|
|
public Aligned align(@NonNull final ZonedDateTime date) {
|
|
return new Aligned(this, date);
|
|
}
|
|
|
|
}
|