2016-07-06 68 views
6

Próbowałem utworzyć maksymalny czas trwania w języku Java 8 za pomocą metody Duration.ofMillis (Long.MAX_VALUE), ale wystąpiło długie przepełnienie. Jak programowo uzyskać równowartość Duration.MAX_VALUE, jeśli istnieje?Jaka jest wartość maksymalna dla Java Duration

Edycja: długi przelew prawdopodobnie powstał w wyniku próby dodania wartości zamiast w trakcie budowy. Przepraszam, że nie można odtwarzać kodu.

Odpowiedz

3

Wygląda Duration przechowywany jest w sekundach (do Long.MAX_VALUE) i nanosekund (do 999,999,999). Wtedy największy możliwy czas trwania wynosi:

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

Kiedy je wydrukować (System.out.print(d)) pojawia się następujący:

PT2562047788015215H30M7.999999999S 

co oznacza: 2562047788015215 godzin, 30 minut i 7.999999999 sekund.

+2

sekund może być ujemne, więc powinno być "Long.MIN_VALUE..LONG.MAX_VALUE' – jhamon

+1

@jhamon, dzięki, poprawiłem mój post. – Alexey

+0

Ten czas trwania odpowiada około 292 miliardów lat. – Tuupertunut

5

Według Javadoc:

Czas wykorzystuje rozdzielczość nanosekund o maksymalnej wartości sekund, które mogą być przechowywane w długi.

Zakres czasu trwania wymaga przechowywania liczby większej niż długiej. Aby to osiągnąć, klasa przechowuje długie reprezentujące sekundy, a int reprezentuje nanosekundę sekundy, która zawsze będzie zawierać się między 0 a 999,999,999. Model ma określony czas trwania, co oznacza, że ​​czas trwania może być ujemny.

+0

Dlaczego więc Long.MAX_VALUE powoduje przepełnienie? Jaka jest maksymalna wartość dozwolona dla części Seconds? – Novaterata

+3

cóż, właśnie wypróbowałem ten fragment kodu: 'Duration test = Duration.ofMillis (Long.MAX_VALUE);' i nie dostaję przepełnienia. Czy możesz pokazać kod, który zgłasza wyjątek? – jhamon

+0

Już nie jest mi przykro. Wiesz, musiało to być później, gdy coś do niego dodano. – Novaterata