Duration.MAX_VALUE
Pavel Rappo
pavel.rappo at gmail.com
Wed Oct 8 20:28:35 UTC 2025
In another thread, there's a question on whether we can define
Duration.MIN such that it's not the exact minimum, but rather the
minimum "negatable minimum"? Put differently, can we define
Duration.MIN as Duration.MAX.negated(), where Duration.MAX is
Duration.ofSeconds(Long.MAX_VALUE, 999_999_999)? What are the concerns
with this, if any?
-Pavel
On Wed, Sep 3, 2025 at 1:49 PM Pavel Rappo <pavel.rappo at gmail.com> wrote:
>
> Couldn't recall or quickly find if this was asked before.
>
> I come across this quite often: there doesn’t seem to be a readily
> available maximum value for java.time.Duration -- a value that
> represents the longest possible duration.
>
> I assume there are plenty of homegrown constants out in the wild
> addressing this. Don’t get me wrong: it’s not hard to create one. The
> issue, in my experience, is that it takes time and sometimes
> experimentation.
>
> Unless one reads the Javadoc carefully, it’s not obvious that the
> maximum duration can be constructed as follows:
>
> Duration.of(Long.MAX_VALUE, 999_999_999);
>
> Naturally, one might first try using IDE autocomplete. For example,
> creating a Duration from Long.MAX_VALUE of a large unit -- millennia,
> centuries, decades, etc. -- only to run into ArithmeticException. Only
> when reaching seconds does it finally work:
>
> Duration.ofSeconds(Long.MAX_VALUE);
>
> or
>
> Duration.of(Long.MAX_VALUE, ChronoUnit.SECONDS);
>
> Of course, there’s no practical difference between
> Duration.of(Long.MAX_VALUE, 999_999_999) and
> Duration.ofSeconds(Long.MAX_VALUE). We’re talking about durations on
> the order of 292 billion years, after all. The exact value isn’t the
> problem. The problem is that the values are inconsistent, and arriving
> to them is error-prone. Adding a constant to java.time.Duration would
> simplify things.
>
> -Pavel
More information about the core-libs-dev
mailing list