2017-09-08 1 views
0

Ich habe eine lange Variable, die die Downtime einer Anwendung in Sekunden darstellt. Ich mag die Ausfallzeiten als HH:mm:ssProblem Konvertieren von Sekunden zu HH: MM: SS Java

Long downTime = 755; 
Date newD = new Date(downTime * 1000); 

anzuzeigen, wenn die lange Variable auf den seit Bestehen ich es multipliziert 1000 die Millisekunden-Wert zu erhalten. Die newD Variable ausgewertet Thu Jan 01 01:12:35 GMT 1970

Der Wert von newD um 1 Stunde ausgeschaltet ist, 755 Sekunden sind = 00:12:35

Es war mein Verständnis, dass Sekunden * 1000 = Millisekunden auf die richtige Antwort bewerten werden. Als I seen here

Wenn ich Duration verwenden, erhalten wir die richtige Antwort.

Duration d = Duration.ofSeconds(downTime); 
PT12M35S 

Aber die Formatierung ist nicht so, wie ich es will.

+2

Werfen Sie einen Blick hier, wie Dauer zu formatieren: https://stackoverflow.com/questions/266825/how-to-format-a-duration-in -java-zB-format-hmmss. – aUserHimself

+3

Ihr aktueller Code würde funktionieren, wenn Sie in UTC wären, Ihre lokale Zeitzone muss eine Stunde vor UTC liegen. –

+4

Wenn Sie Zugriff auf die Duration-Klasse haben, bedeutet dies auch, dass Sie Java 8 verwenden. Verwenden Sie daher nicht mehr die alte Date-Klasse. Verwenden Sie Klassen aus dem Paket java.time. –

Antwort

3

LocalTime.MIN

LocalTime.MIN.plusSeconds(755L) 

Oder

LocalTime.MIN.plus( 
    Duration.ofSeconds(755L) 
) 

CAVEAT: Dies ist ein Hack, und ich würde es nicht empfehlen. Die Darstellung einer Zeitspanne als Tageszeit ist mehrdeutig und verwirrend.

Standardmäßig gibt die LocalTime::toString-Methode die nachfolgenden Einheiten bei Null aus. Um alle drei Teile (Stunden, Minuten, Sekunden) zu erzwingen, verwenden Sie DateTimeFormatter.

DateTimeFormatter f = DateTimeFormatter.ofPattern("HH:mm:ss") ; 
String output = lt.format(f) ; 

Siehe hierzu code run live at IdeOne.com.

00:12:35

ISO 8601

Ich schlage vor, wenn möglich, trainieren Ihre Benutzer auf dem Standard ISO 8601 Format. Dieses Format ist praktisch, klar und eindeutig. Die Standardformate werden standardmäßig in den Klassen java.time zum Parsen/Erzeugen von Strings verwendet.

PT12M35S

Oder einen String zu erzeugen, um die Menge an Zeit, in Prosa formulierend.

+2

Ich stimme zu, dass dieser Hack verwirrend sein könnte. "Dauer" gibt es (und ist vom OP bekannt), um eine Dauer darzustellen ... damit ist es die Lösung. – AxelH

1

Überprüfen Sie, ob Sie können diese verwenden:

long millis = 755000; 
String hms = String.format("%02d:%02d:%02d", 
    TimeUnit.MILLISECONDS.toHours(millis), 
    TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1), 
    TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1)); 
System.out.println(hms); 
Verwandte Themen