125 Stimmen

Wie kann man Millisekunden in eine für Menschen lesbare Form umwandeln?

Ich muss eine beliebige Anzahl von Millisekunden in Tage, Stunden, Minuten und Sekunden umrechnen.

Zum Beispiel: 10 Tage, 5 Stunden, 13 Minuten, 1 Sekunde.

234voto

Greg Hewgill Punkte 882617

Nun, da sich niemand sonst gemeldet hat, werde ich den einfachen Code dafür schreiben:

x = ms / 1000
seconds = x % 60
x /= 60
minutes = x % 60
x /= 60
hours = x % 24
x /= 24
days = x

Ich bin nur froh, dass du bei Tagen stehen geblieben bist und nicht nach Monaten gefragt hast :)

In den obigen Ausführungen wird davon ausgegangen, dass / steht für abbrechende Ganzzahldivision. Wenn Sie diesen Code in einer Sprache verwenden, in der / eine Gleitkommadivision darstellt, müssen Sie die Ergebnisse der Division bei Bedarf manuell abschneiden.

60voto

friol Punkte 6956

A sei die Anzahl der Millisekunden. Dann haben Sie:

seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24

und so weiter ( % ist der Modulus-Operator).

Ich hoffe, das hilft.

28voto

Nick Grealy Punkte 21004

Beide nachstehenden Lösungen verwenden javascript (Ich hatte keine Ahnung, dass die Lösung sprachunabhängig ist!) Beide Lösungen müssen erweitert werden, wenn die Dauer der Erfassung > 1 month .

Lösung 1: Verwenden Sie das Date-Objekt

var date = new Date(536643021);
var str = '';
str += date.getUTCDate()-1 + " days, ";
str += date.getUTCHours() + " hours, ";
str += date.getUTCMinutes() + " minutes, ";
str += date.getUTCSeconds() + " seconds, ";
str += date.getUTCMilliseconds() + " millis";
console.log(str);

Gibt:

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"

Bibliotheken sind hilfreich, aber warum eine Bibliothek benutzen, wenn man das Rad neu erfinden kann! :)

Lösung 2: Schreiben Sie Ihren eigenen Parser

var getDuration = function(millis){
    var dur = {};
    var units = [
        {label:"millis",    mod:1000},
        {label:"seconds",   mod:60},
        {label:"minutes",   mod:60},
        {label:"hours",     mod:24},
        {label:"days",      mod:31}
    ];
    // calculate the individual unit values...
    units.forEach(function(u){
        millis = (millis - (dur[u.label] = (millis % u.mod))) / u.mod;
    });
    // convert object to a string representation...
    var nonZero = function(u){ return dur[u.label]; };
    dur.toString = function(){
        return units
            .reverse()
            .filter(nonZero)
            .map(function(u){
                return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
            })
            .join(', ');
    };
    return dur;
};

Erstellt ein "duration"-Objekt mit den von Ihnen gewünschten Feldern. Die Formatierung eines Zeitstempels wird dann einfach...

console.log(getDuration(536643021).toString());

Gibt:

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"

23voto

David Dossot Punkte 33368

Apache Commons Lang hat eine DurationFormatUtils die sehr hilfreiche Methoden enthält wie formatDurationWords .

8voto

albertein Punkte 25058

Sie sollten die datetime-Funktionen der von Ihnen verwendeten Sprache verwenden, aber hier ist der Code nur zum Spaß:

int milliseconds = someNumber;

int seconds = milliseconds / 1000;

int minutes = seconds / 60;

seconds %= 60;

int hours = minutes / 60;

minutes %= 60;

int days = hours / 24;

hours %= 24;

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