Java持续时间的最大值是多少

Nov*_*ata 9 java duration max java-7 java-8

我试图通过使用Duration.ofMillis(Long.MAX_VALUE)在Java 8中创建最大持续时间但是有一个很长的溢出.如果存在,我将如何以编程方式获得等效的Duration.MAX_VALUE?

编辑:长溢出可能是由于尝试添加到值而不是在构造期间引起的.抱歉没有可重现的代码.

Ale*_*xey 9

它看起来Duration以秒(最多Long.MAX_VALUE)和纳秒(最多999,999,999)存储。那么可能的最大持续时间是:

Duration d = Duration.ofSeconds(Long.MAX_VALUE, 999_999_999);
Run Code Online (Sandbox Code Playgroud)

当我打印它 ( System.out.print(d)) 时,我得到以下信息:

PT2562047788015215H30M7.999999999S
Run Code Online (Sandbox Code Playgroud)

这意味着:2562047788015215 小时 30 分钟和 7.999999999 秒。

  • 这个持续时间相当于大约 2920 亿年。 (6认同)
  • seconds 可以是负数,所以它应该是 `Long.MIN_VALUE..LONG.MAX_VALUE` (2认同)

jha*_*mon 5

根据Javadoc:

持续时间使用纳秒分辨率,最大值可以保持很长的秒数.

持续时间的范围需要存储大于长的数字.为了实现这一点,该类存储一个代表秒的长整数和一个代表纳秒秒的int,它总是在0到999,999,999之间.该模型具有定向持续时间,意味着持续时间可能是负的.

  • 好吧,我刚尝试了这段代码:`Duration test = Duration.ofMillis(Long.MAX_VALUE);`而且我没有溢出.你能展示抛出异常的代码吗? (5认同)
  • 那么为什么Long.MAX_VALUE会导致溢出呢?秒部分允许的最大值是多少? (2认同)

Nic*_* T. 5

Simple:

Duration maxDur = ChronoUnit.FOREVER.getDuration();
Run Code Online (Sandbox Code Playgroud)