简体   繁体   中英

What is the Maximum value for Java Duration

I tried to create a max Duration in Java 8 by using Duration.ofMillis(Long.MAX_VALUE) but got a long overflow. How would I programmatically get the equivalent of a Duration.MAX_VALUE if it existed?

Edit: The long overflow was likely caused by an attempt to add to the value instead of during construction. Apologies for not having reproducible code.

It looks like Duration is stored in seconds (up to Long.MAX_VALUE ) and nanoseconds (up to 999,999,999 ). Then the biggest duration possible is:

Duration d = Duration.ofSeconds(Long.MAX_VALUE, 999_999_999);

When I print it ( System.out.print(d) ) I get the following:

PT2562047788015215H30M7.999999999S

which means: 2562047788015215 hours, 30 minutes, and 7.999999999 seconds.

According to the Javadoc :

The duration uses nanosecond resolution with a maximum value of the seconds that can be held in a long.

The range of a duration requires the storage of a number larger than a long. To achieve this, the class stores a long representing seconds and an int representing nanosecond-of-second, which will always be between 0 and 999,999,999. The model is of a directed duration, meaning that the duration may be negative.

简单:

Duration maxDur = ChronoUnit.FOREVER.getDuration();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM