629 Stimmen

Wie konvertiert man Millisekunden in "X Minuten, x Sekunden" in Java?

Ich möchte die Zeit erfassen mit System.currentTimeMillis() wenn ein Benutzer etwas in meinem Programm beginnt. Wenn er fertig ist, subtrahiere ich den aktuellen System.currentTimeMillis() von der start und ich möchte ihnen die verstrichene Zeit in einem für den Menschen lesbaren Format wie "XX Stunden, XX Minuten, XX Sekunden" oder sogar "XX Minuten, XX Sekunden" anzeigen, denn es ist unwahrscheinlich, dass jemand eine Stunde braucht.

Wie kann man das am besten machen?

11voto

Xtera Punkte 119

Ich denke, das ist der beste Weg:

String.format("%d min, %d sec", 
    TimeUnit.MILLISECONDS.toSeconds(length)/60,
    TimeUnit.MILLISECONDS.toSeconds(length) % 60 );

9voto

dogbane Punkte 253146

Joda-Time

使用方法 Joda-Time :

DateTime startTime = new DateTime();

// do something

DateTime endTime = new DateTime();
Duration duration = new Duration(startTime, endTime);
Period period = duration.toPeriod().normalizedStandard(PeriodType.time());
System.out.println(PeriodFormat.getDefault().print(period));

8voto

Kaaveh Mohamedi Punkte 877

Für diejenigen, die nach Kotlin-Code suchen:

fun converter(millis: Long): String =
        String.format(
            "%02d : %02d : %02d",
            TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(
                TimeUnit.MILLISECONDS.toHours(millis)
            ),
            TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(
                TimeUnit.MILLISECONDS.toMinutes(millis)
            )
        )

Beispielhafte Ausgabe: 09 : 10 : 26

8voto

MikeFHay Punkte 8021

Erstens, System.currentTimeMillis() y Instant.now() sind nicht ideal für die Zeitmessung. Beide melden die Zeit der Wanduhr, die der Computer nicht genau kennt und die sich unregelmäßig bewegen kann, auch wenn sie rückwärts wenn zum Beispiel der NTP-Daemon die Systemzeit korrigiert. Wenn Ihre Zeitmessung auf einem einzelnen Rechner stattfindet, sollten Sie stattdessen [System.nanoTime()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html#nanoTime()) .

Zweitens, ab Java 8 java.time.Duration ist der beste Weg, um eine Dauer darzustellen:

long start = System.nanoTime();
// do things...
long end = System.nanoTime();
Duration duration = Duration.ofNanos(end - start);
System.out.println(duration); // Prints "PT18M19.511627776S"
System.out.printf("%d Hours %d Minutes %d Seconds%n",
        duration.toHours(), duration.toMinutes() % 60, duration.getSeconds() % 60);
// prints "0 Hours 18 Minutes 19 Seconds"

6voto

Shohan Ahmed Sijan Punkte 4171

Meine einfache Rechnung:

String millisecToTime(int millisec) {
    int sec = millisec/1000;
    int second = sec % 60;
    int minute = sec / 60;
    if (minute >= 60) {
        int hour = minute / 60;
        minute %= 60;
        return hour + ":" + (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
    }
    return minute + ":" + (second < 10 ? "0" + second : second);
}

Viel Spaß beim Codieren :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X