Ich muss eine beliebige Anzahl von Millisekunden in Tage, Stunden, Minuten Sekunden umrechnen.
Zum Beispiel: 10 Tage, 5 Stunden, 13 Minuten, 1 Sekunde.
date
time
string-formatting
datetime-format
FlySwat
quelle
quelle
Antworten:
Nun, da niemand anderes aufgestiegen ist, schreibe ich den einfachen Code, um dies zu tun:
Ich bin nur froh, dass du an Tagen angehalten hast und seit Monaten nicht mehr gefragt hast. :) :)
Beachten Sie, dass oben angenommen wird, dass dies
/
das Abschneiden einer ganzzahligen Division darstellt. Wenn Sie diesen Code in einer Sprache verwenden, in der/
die Gleitkommadivision dargestellt wird, müssen Sie die Ergebnisse der Division nach Bedarf manuell abschneiden.quelle
Sei A die Anzahl der Millisekunden. Dann haben Sie:
und so weiter (
%
ist der Moduloperator).Hoffe das hilft.
quelle
/
Gleitkommadivision durchgeführt wird, müssen Sie den Wert abschneiden. In anderen Antworten wird angenommen, dass/
eine Ganzzahldivision durchgeführt wird.Beide 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 erfasst wird
> 1 month
.Lösung 1: Verwenden Sie das Date-Objekt
Gibt:
Bibliotheken sind hilfreich, aber warum eine Bibliothek verwenden, wenn Sie das Rad neu erfinden können? :) :)
Lösung 2: Schreiben Sie Ihren eigenen Parser
Erstellt ein "Dauer" -Objekt mit den gewünschten Feldern. Das Formatieren eines Zeitstempels wird dann einfach ...
Gibt:
quelle
return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
var nonZero = function(u){ return !u.startsWith("0"); }; // convert object to a string representation... dur.toString = function(){ return units.reverse().map(function(u){ return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label); }).filter(nonZero).join(', '); };
Apache Commons Lang verfügt über DurationFormatUtils mit sehr hilfreichen Methoden wie formatDurationWords .
quelle
Sie sollten die datetime-Funktionen der von Ihnen verwendeten Sprache verwenden, aber zum Spaß hier der Code:
quelle
Dies ist eine Methode, die ich geschrieben habe. Es dauert ein
integer milliseconds value
und gibt einhuman-readable String
:quelle
quelle
Ich würde vorschlagen, die Datums- / Zeitfunktionen / Bibliotheken zu verwenden, die Ihre Sprache / das Framework Ihrer Wahl bietet. Schauen Sie sich auch die Formatierungsfunktionen für Zeichenfolgen an, da diese häufig eine einfache Möglichkeit bieten, Datums- / Zeitstempel zu übergeben und ein für Menschen lesbares Zeichenfolgenformat auszugeben.
quelle
Ihre Auswahl ist einfach:
quelle
quelle
Dies sollte gedruckt werden: 0.0: 1: 9
quelle
Warum einfach nicht so etwas tun:
var ms = 86400;
var Sekunden = ms / 1000; //86.4
var Minuten = Sekunden / 60; //1.4400000000000002
var Stunden = Minuten / 60; //0.024000000000000004
var Tage = Stunden / 24; //0.0010000000000000002
Und Umgang mit Float-Präzision, zB Number (Minuten.Fixiert (5)) //1.44
quelle
In Java
Gibt so etwas:
quelle
Ich kann die erste Antwort auf Ihre Frage nicht kommentieren, aber es gibt einen kleinen Fehler. Sie sollten parseInt oder Math.floor verwenden, um Gleitkommazahlen in Ganzzahlen umzuwandeln, d.h.
Persönlich verwende ich CoffeeScript in meinen Projekten und mein Code sieht folgendermaßen aus:
quelle
Dies ist eine Lösung. Später können Sie durch ":" teilen und die Werte des Arrays übernehmen
quelle
Hier ist meine Lösung mit TimeUnit.
UPDATE: Ich sollte darauf hinweisen, dass dies in groovig geschrieben ist, aber Java ist fast identisch.
quelle
Ein flexibler Weg, dies zu tun:
(Nicht für das aktuelle Datum gemacht, aber gut genug für die Dauer)
NB: Sie können auch timeSteps einstellen als Parameter , wenn Sie die steuern möchten.
Verwendung (Kopieren eines Tests):
quelle
Ich schlage vor, http://www.ocpsoft.org/prettytime/ zu verwenden. library zu verwenden.
Es ist sehr einfach, Zeitintervalle in lesbarer Form zu erhalten
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));
Es wird wie "Momente von jetzt an" gedruckt.
anderes Beispiel
PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);
dann string vor = "vor 1 Stunde"
quelle
Hier ist eine genauere Methode in JAVA. Ich habe diese einfache Logik implementiert. Ich hoffe, dies wird Ihnen helfen:
quelle