2016-07-06 18 views
6

Ich habe versucht, eine maximale Dauer in Java 8 mit Duration.ofMillis (Long.MAX_VALUE) erstellen, aber einen langen Überlauf. Wie würde ich programmatisch das Äquivalent eines Duration.MAX_VALUE erhalten, wenn es existiert?Was ist der maximale Wert für Java-Dauer

Edit: Der lange Überlauf wurde wahrscheinlich durch einen Versuch verursacht, den Wert statt während der Konstruktion hinzuzufügen. Entschuldigung dafür, dass kein reproduzierbarer Code vorhanden ist.

Antwort

3

Es sieht aus wie Duration in Sekunden gespeichert (bis zu Long.MAX_VALUE) und Nanosekunden (bis zu 999,999,999). Dann ist die größte Dauer möglich ist:

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

Wenn ich es drucken (System.out.print(d)) erhalte ich die folgende:

PT2562047788015215H30M7.999999999S 

was bedeutet: 2562047788015215 Stunden, 30 Minuten, und 7,999999999 Sekunden.

+2

Sekunden können negativ sein, also sollte es 'Long.MIN_VALUE..LONG.MAX_VALUE' sein – jhamon

+1

@jhamon, danke, korrigierte ich meinen Beitrag. – Alexey

+0

Diese Dauer entspricht rund 292 Milliarden Jahren. – Tuupertunut

5

Nach dem Javadoc:

Die Dauer verwendet Nanosekunde Auflösung mit einem Maximalwert der Sekunden an, die in einer langen gehalten werden kann.

Der Bereich einer Dauer erfordert die Speicherung einer Zahl, die größer als eine Länge ist. Um dies zu erreichen, speichert die Klasse eine lange darstellende Sekunde und einen int, der Nanosekundensekunde repräsentiert, der immer zwischen 0 und 999.999.999 liegt. Das Modell hat eine gerichtete Dauer, was bedeutet, dass die Dauer negativ sein kann.

+0

Also warum würde Long.MAX_VALUE einen Überlauf verursachen? Was ist der maximal zulässige Wert für den Sekundenanteil? – Novaterata

+3

Nun, ich habe gerade dieses Stück Code versucht: 'Dauertest = Duration.ofMillis (Long.MAX_VALUE);' und ich bekomme keinen Überlauf. Können Sie den Code anzeigen, der die Ausnahme auslöst? – jhamon

+0

Es tut mir nicht mehr leid. Weißt du, es muss später verursacht worden sein, als etwas hinzugefügt wurde. – Novaterata