2016-07-06 42 views
6

Ho provato a creare una durata massima in Java 8 utilizzando Duration.ofMillis (Long.MAX_VALUE) ma ho ottenuto un lungo overflow. Come ottengo a livello di programmazione l'equivalente di un Duration.MAX_VALUE se esiste?Qual è il valore massimo per Java Durata

Modifica: il lungo overflow è stato probabilmente causato da un tentativo di aggiungere valore anziché durante la costruzione. Ci scusiamo per non avere codice riproducibile.

risposta

3

Sembra Duration è memorizzato in secondi (fino a Long.MAX_VALUE) e nanosecondi (fino a 999,999,999). Poi il più grande tempo possibile è:

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

Quando stampo esso (System.out.print(d)) ottengo il seguente:

PT2562047788015215H30M7.999999999S 

che significa: 2562047788015215 ore, 30 minuti, e 7.999999999 secondi.

+2

secondi possono essere negativi quindi dovrebbe essere 'Long.MIN_VALUE..LONG.MAX_VALUE' – jhamon

+1

@jhamon, grazie, ho corretto il mio post. – Alexey

+0

Tale durata è pari a circa 292 miliardi di anni. – Tuupertunut

5

Secondo il Javadoc:

La durata utilizza risoluzione nanosecondi con un valore massimo dei secondi che possono essere tenuti in una lunga.

L'intervallo di una durata richiede la memorizzazione di un numero maggiore di un lungo. Per ottenere ciò, la classe memorizza un long che rappresenta secondi e un int che rappresenta un nanosecondo di secondo, che sarà sempre compreso tra 0 e 999.999.999. Il modello ha una durata diretta, il che significa che la durata può essere negativa.

+0

Quindi perché Long.MAX_VALUE causerebbe un overflow? Qual è il valore massimo consentito per la porzione Seconds? – Novaterata

+3

bene, ho appena provato questo pezzo di codice: 'Durata test = Duration.ofMillis (Long.MAX_VALUE);' e non ottengo un overflow. Potresti mostrare il codice che genera l'eccezione? – jhamon

+0

Non mi dispiace più. Sai, deve essere stato causato più tardi quando qualcosa è stato aggiunto ad esso. – Novaterata