2016-07-06 143 views
6

我試圖通過使用Duration.ofMillis(Long.MAX_VALUE)在Java 8中創建最大持續時間,但得到了長時間的溢出。 我如何以編程方式獲得Duration.MAX_VALUE的等價物(如果存在)?什麼是Java持續時間的最大值

編輯:長時間溢出可能是由於試圖增加值而不是在施工期間造成的。對沒有可重複代碼的道歉。

回答

3

它看起來像Duration被存儲在秒(高達Long.MAX_VALUE)和納秒(高達999,999,999)。然後,可能最大的時間是:

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

當我打印(System.out.print(d))我得到以下幾點:

PT2562047788015215H30M7.999999999S 

這意味着:2562047788015215小時,30分鐘,7.999999999秒。

+2

秒可以是負值,因此它應該是'Long.MIN_VALUE..LONG.MAX_VALUE' – jhamon

+1

@jhamon,謝謝,我更正了我的帖子。 – Alexey

+0

這段時間相當於大約2920億年。 – Tuupertunut

5

按照Javadoc

持續時間使用納秒級分辨率,可在長舉行秒的最大值。

持續時間的範圍需要存儲大於長的數字。爲了達到這個目的,這個類存儲了一個表示秒的長整數和一個表示納秒級的整數,它總是在0到999,999,999之間。該模型具有定向持續時間,這意味着持續時間可能是負面的。

+0

那麼爲什麼Long.MAX_VALUE會導致溢出? Seconds部分允許的最大值是多少? – Novaterata

+3

好吧,我只是試過這段代碼:'持續時間測試= Duration.ofMillis(Long.MAX_VALUE);'並且我沒有溢出。你能顯示引發異常的代碼嗎? – jhamon

+0

我不再抱歉。你知道,當它添加了一些東西時,它一定是以後造成的。 – Novaterata

相關問題