diff --git a/optaplanner-core/src/main/java/org/optaplanner/core/api/domain/valuerange/ValueRangeFactory.java b/optaplanner-core/src/main/java/org/optaplanner/core/api/domain/valuerange/ValueRangeFactory.java index c47cc17f4b..444c13599c 100644 --- a/optaplanner-core/src/main/java/org/optaplanner/core/api/domain/valuerange/ValueRangeFactory.java +++ b/optaplanner-core/src/main/java/org/optaplanner/core/api/domain/valuerange/ValueRangeFactory.java @@ -18,6 +18,10 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalUnit; import org.optaplanner.core.impl.domain.valuerange.buildin.bigdecimal.BigDecimalValueRange; import org.optaplanner.core.impl.domain.valuerange.buildin.biginteger.BigIntegerValueRange; @@ -25,6 +29,7 @@ import org.optaplanner.core.impl.domain.valuerange.buildin.primdouble.DoubleValueRange; import org.optaplanner.core.impl.domain.valuerange.buildin.primint.IntValueRange; import org.optaplanner.core.impl.domain.valuerange.buildin.primlong.LongValueRange; +import org.optaplanner.core.impl.domain.valuerange.buildin.temporal.TemporalValueRange; /** * Factory for {@link ValueRange}. @@ -135,4 +140,16 @@ public static CountableValueRange createBigDecimalValueRange(BigDeci return new BigDecimalValueRange(from, to, incrementUnit); } + /** + * Build a {@link CountableValueRange} of a subset of {@link Temporal} values (such as {@link LocalDate} or {@link LocalDateTime}) between 2 bounds. + * All parameters must have the same {@link TemporalUnit}. + * @param from never null, inclusive minimum + * @param to never null, exclusive maximum, {@code >= from} + * @param incrementUnitAmount {@code > 0} + * @param incrementUnitType never null, must be {@link Temporal#isSupported(TemporalUnit) supported} by {@code from} and {@code to} + */ + public static CountableValueRange createTemporalRange(Temporal from, Temporal to, long incrementUnitAmount, TemporalUnit incrementUnitType) { + return new TemporalValueRange(from, to, incrementUnitAmount, incrementUnitType); + } + } diff --git a/optaplanner-docs/src/main/docbook/en-US/Chapter-Planner_configuration/Chapter-Planner_configuration.xml b/optaplanner-docs/src/main/docbook/en-US/Chapter-Planner_configuration/Chapter-Planner_configuration.xml index b9ecd28424..94cd76323e 100755 --- a/optaplanner-docs/src/main/docbook/en-US/Chapter-Planner_configuration/Chapter-Planner_configuration.xml +++ b/optaplanner-docs/src/main/docbook/en-US/Chapter-Planner_configuration/Chapter-Planner_configuration.xml @@ -892,6 +892,11 @@ public class NQueens { BigDecimal: A decimal point range. By default, the increment unit is the lowest non-zero value in the scale of the bounds. + + + Temporal (such as LocalDate, LocalDateTime, + ...): A time range. +