RFR: 8366829: Add constants for the Duration MIN/MAX values [v2]

Stephen Colebourne scolebourne at openjdk.org
Tue Sep 30 18:54:55 UTC 2025


On Mon, 29 Sep 2025 21:36:35 GMT, Pavel Rappo <prappo at openjdk.org> wrote:

>> We have [recently discussed][] a possibility of adding the `Duration.MIN` and `Duration.MAX` constants. Can we now start implementation? If and when we are in agreement on this PR, I will file a CSR.
>> 
>> I drafted a minimal specification and added some tests. I tried to phrase the spec for `Duration.MIN` in a way that makes it clear that `Duration.MIN` is the most negative value and not the least positive.
>> 
>> [recently discussed]: https://mail.openjdk.org/pipermail/core-libs-dev/2025-September/151098.html
>
> Pavel Rappo has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Update copyright years
>    
>    Note: any commit hashes below might be outdated due to subsequent
>    history rewriting (e.g. git rebase).
>    
>     + update src/java.base/share/classes/java/time/temporal/ChronoUnit.java due to 9a54ba1d353
>     + update test/jdk/java/time/tck/java/time/TCKDuration.java due to 9a54ba1d353
>  - Provide @apiNote as suggested

src/java.base/share/classes/java/time/Duration.java line 151:

> 149:      * instant}, as doing so will cause overflow. Extreme care should be taken
> 150:      * when performing {@code Duration} arithmetic on them, such as adding
> 151:      * them to or subtracting them from another duration.

https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/time/Instant.html#MIN

Suggestion:

     * The minimum supported Duration, which is {@code Long.MIN_VALUE} seconds.
     *
     * @apiNote This constant represents the smallest possible instance of {@code Duration}.
     * Since Durations are directed, the smallest possible duration is negative.
     * <p>
     * The constant is intended to be used as a sentinel value, such as in
     * comparisons and tests. Care should be taken when performing arithmetic
     * on {@code MIN} as there is a high risk that {@code ArithmeticException}
     * will be thrown.


Similar for MAX. But it can repeat the class header comment about being longer than the age of the universe,

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/27534#discussion_r2392531493


More information about the core-libs-dev mailing list