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?

2voto

TOUDIdel Punkte 1255

1voto

Verwenden Sie java.util.concurrent.TimeUnit, und verwenden Sie diese einfache Methode:

private static long timeDiff(Date date, Date date2, TimeUnit unit) {
    long milliDiff=date2.getTime()-date.getTime();
    long unitDiff = unit.convert(milliDiff, TimeUnit.MILLISECONDS);
    return unitDiff; 
}

Zum Beispiel:

SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd HH:mm:ss");  
Date firstDate = sdf.parse("06/24/2017 04:30:00");
Date secondDate = sdf.parse("07/24/2017 05:00:15");
Date thirdDate = sdf.parse("06/24/2017 06:00:15");

System.out.println("days difference: "+timeDiff(firstDate,secondDate,TimeUnit.DAYS));
System.out.println("hours difference: "+timeDiff(firstDate,thirdDate,TimeUnit.HOURS));
System.out.println("minutes difference: "+timeDiff(firstDate,thirdDate,TimeUnit.MINUTES));
System.out.println("seconds difference: "+timeDiff(firstDate,thirdDate,TimeUnit.SECONDS));

1voto

bitstream Punkte 439

Ich habe die Antwort von @MyKuLLSKI geändert und die Unterstützung der Pluralisierung hinzugefügt. Ich habe die Sekunden herausgenommen, weil ich sie nicht brauchte, aber Sie können sie gerne wieder einfügen, wenn Sie sie brauchen.

public static String intervalToHumanReadableTime(int intervalMins) {

    if(intervalMins <= 0) {
        return "0";
    } else {

        long intervalMs = intervalMins * 60 * 1000;

        long days = TimeUnit.MILLISECONDS.toDays(intervalMs);
        intervalMs -= TimeUnit.DAYS.toMillis(days);
        long hours = TimeUnit.MILLISECONDS.toHours(intervalMs);
        intervalMs -= TimeUnit.HOURS.toMillis(hours);
        long minutes = TimeUnit.MILLISECONDS.toMinutes(intervalMs);

        StringBuilder sb = new StringBuilder(12);

        if (days >= 1) {
            sb.append(days).append(" day").append(pluralize(days)).append(", ");
        }

        if (hours >= 1) {
            sb.append(hours).append(" hour").append(pluralize(hours)).append(", ");
        }

        if (minutes >= 1) {
            sb.append(minutes).append(" minute").append(pluralize(minutes));
        } else {
            sb.delete(sb.length()-2, sb.length()-1);
        }

        return(sb.toString());          

    }

}

public static String pluralize(long val) {
    return (Math.round(val) > 1 ? "s" : "");
}

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