我試圖通過使用Duration.ofMillis(Long.MAX_VALUE)在Java 8中創建最大持續時間,但得到了長時間的溢出。 我如何以編程方式獲得Duration.MAX_VALUE的等價物(如果存在)?什麼是Java持續時間的最大值
編輯:長時間溢出可能是由於試圖增加值而不是在施工期間造成的。對沒有可重複代碼的道歉。
我試圖通過使用Duration.ofMillis(Long.MAX_VALUE)在Java 8中創建最大持續時間,但得到了長時間的溢出。 我如何以編程方式獲得Duration.MAX_VALUE的等價物(如果存在)?什麼是Java持續時間的最大值
編輯:長時間溢出可能是由於試圖增加值而不是在施工期間造成的。對沒有可重複代碼的道歉。
它看起來像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秒。
按照Javadoc:
持續時間使用納秒級分辨率,可在長舉行秒的最大值。
持續時間的範圍需要存儲大於長的數字。爲了達到這個目的,這個類存儲了一個表示秒的長整數和一個表示納秒級的整數,它總是在0到999,999,999之間。該模型具有定向持續時間,這意味着持續時間可能是負面的。
那麼爲什麼Long.MAX_VALUE會導致溢出? Seconds部分允許的最大值是多少? – Novaterata
好吧,我只是試過這段代碼:'持續時間測試= Duration.ofMillis(Long.MAX_VALUE);'並且我沒有溢出。你能顯示引發異常的代碼嗎? – jhamon
我不再抱歉。你知道,當它添加了一些東西時,它一定是以後造成的。 – Novaterata
秒可以是負值,因此它應該是'Long.MIN_VALUE..LONG.MAX_VALUE' – jhamon
@jhamon,謝謝,我更正了我的帖子。 – Alexey
這段時間相當於大約2920億年。 – Tuupertunut