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?

1326voto

siddhadev Punkte 16181

Verwenden Sie die java.util.concurrent.TimeUnit Klasse:

String.format("%d min, %d sec", 
    TimeUnit.MILLISECONDS.toMinutes(millis),
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);

Nota: TimeUnit ist Teil der Java 1.5-Spezifikation, aber toMinutes wurde mit Java 1.6 hinzugefügt.

Um eine führende Null für die Werte 0-9 hinzuzufügen, tun Sie dies einfach:

String.format("%02d min, %02d sec", 
    TimeUnit.MILLISECONDS.toMinutes(millis),
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);

Si TimeUnit o toMinutes nicht unterstützt werden (z. B. bei Android vor API-Version 9), verwenden Sie die folgenden Gleichungen:

int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...

136voto

Brent Writes Code Punkte 17926

Auf der Grundlage der Antwort von @siddhadev habe ich eine Funktion geschrieben, die Millisekunden in eine formatierte Zeichenkette umwandelt:

   /**
     * Convert a millisecond duration to a string format
     * 
     * @param millis A duration to convert to a string form
     * @return A string of the form "X Days Y Hours Z Minutes A Seconds".
     */
    public static String getDurationBreakdown(long millis) {
        if(millis < 0) {
            throw new IllegalArgumentException("Duration must be greater than zero!");
        }

        long days = TimeUnit.MILLISECONDS.toDays(millis);
        millis -= TimeUnit.DAYS.toMillis(days);
        long hours = TimeUnit.MILLISECONDS.toHours(millis);
        millis -= TimeUnit.HOURS.toMillis(hours);
        long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
        millis -= TimeUnit.MINUTES.toMillis(minutes);
        long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);

        StringBuilder sb = new StringBuilder(64);
        sb.append(days);
        sb.append(" Days ");
        sb.append(hours);
        sb.append(" Hours ");
        sb.append(minutes);
        sb.append(" Minutes ");
        sb.append(seconds);
        sb.append(" Seconds");

        return(sb.toString());
    }

92voto

Damien Punkte 1371
long time = 1536259;

return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time));

Drucke:

25:36:259

38voto

Vitalii Fedorenko Punkte 103468

Die Verwendung des java.time-Paket in Java 8:

Instant start = Instant.now();
Thread.sleep(63553);
Instant end = Instant.now();
System.out.println(Duration.between(start, end));

Die Ausgabe erfolgt in ISO 8601 Dauerformat : PT1M3.553S (1 Minute und 3,553 Sekunden).

36voto

Bombe Punkte 77831

Ähm ... wie viele Millisekunden sind in einer Sekunde? Und in einer Minute? Division ist nicht so schwer.

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);

Machen Sie so weiter für Stunden, Tage, Wochen, Monate, Jahre, Jahrzehnte, was auch immer.

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