2016-07-06 11 views
6

Я попытался создать максимальную продолжительность в Java 8 с помощью Duration.ofMillis (Long.MAX_VALUE), но получил длинное переполнение. Как бы программно получить эквивалент Duration.MAX_VALUE, если он существует?Что такое максимальное значение для Java Duration

Редактирование: Длительное переполнение, вероятно, было вызвано попыткой добавить к значению, а не во время строительства. Извинения за отсутствие воспроизводимого кода.

ответ

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

Эта продолжительность эквивалентна примерно 292 миллиардам лет. – Tuupertunut

5

Согласно Javadoc:

Продолжительность использует разрешение наносекунд с максимальным значением в секундах, которое может удерживаться в длинной.

Для диапазона продолжительности требуется хранить число больше длинного. Для этого класс хранит длинные представляющие секунды и int, представляющие наносекундную секунду, которая всегда будет между 0 и 999 999 999. Модель имеет направленную продолжительность, что означает, что продолжительность может быть отрицательной.

+0

Итак, почему Long.MAX_VALUE вызывает переполнение? Какое максимальное значение допустимо для части Seconds? – Novaterata

+3

ну, я просто попробовал этот кусок кода: 'Duration test = Duration.ofMillis (Long.MAX_VALUE);' и я не получаю переполнение. Не могли бы вы показать код, который генерирует исключение? – jhamon

+0

Мне больше не жаль. Вы знаете, это должно было быть вызвано позже, когда к нему добавилось что-то. – Novaterata

 Смежные вопросы

  • Нет связанных вопросов^_^