Was ist die empfohlene Methode zum Formatieren von TimeSpan
Objekten in eine Zeichenfolge mit einem benutzerdefinierten Format?
Bitte beachten Sie: Diese Antwort gilt für .Net 4.0 und höher. Wenn Sie eine Zeitspanne in .Net 3.5 oder niedriger formatieren möchten, lesen Sie bitte die Antwort von JohannesH .
In .Net 4.0 wurden benutzerdefinierte Zeichenfolgen im TimeSpan-Format eingeführt. Eine vollständige Referenz der verfügbaren Formatspezifizierer finden Sie auf der Seite MSDN Custom TimeSpan Format Strings .
Hier ist ein Beispiel für eine Zeichenfolge im Zeitspannenformat:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( UPDATE ) und hier ein Beispiel mit C # 6-String-Interpolation:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Sie müssen das Zeichen ":" mit einem "\" maskieren (das selbst maskiert werden muss, es sei denn, Sie verwenden eine wörtliche Zeichenfolge).
In diesem Auszug aus der Seite MSDN Custom TimeSpan Format Strings wird erläutert, wie Sie das ":" und "." Zeichen in einer Formatzeichenfolge:
Die benutzerdefinierten TimeSpan-Formatspezifizierer enthalten keine Platzhaltertrennzeichen, z. B. Symbole, die Tage von Stunden, Stunden von Minuten oder Sekunden von Bruchsekunden trennen. Stattdessen müssen diese Symbole als Zeichenfolgenliterale in die Zeichenfolge im benutzerdefinierten Format aufgenommen werden. Beispielsweise definiert "dd.hh: mm" einen Punkt (.) Als Trennzeichen zwischen Tagen und Stunden und einen Doppelpunkt (:) als Trennzeichen zwischen Stunden und Minuten.
myTimeSpan = new TimeSpan(15, 35, 54);
der AnweisungmyTimeSpan .ToString("hh\\mm\\ss");
dazu führt15m35s54
. Ich glaube nicht, dass Sie das beabsichtigt haben, da es ein m nach Ihren Stunden und ein s nach Ihren Minuten platzieren wird.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Aus Anwendersicht ist es möglicherweise besser, die Tage auszugeben, aber niemand möchte mental herausfinden, wie viele Tage in mehr als 200 Stunden liegen.Für .NET 3.5 und niedriger können Sie Folgendes verwenden:
Code aus einer Jon Skeet- Antwort auf Bytes
Informationen zu .NET 4.0 und höher finden Sie unter DoctaJonez- Antwort .
quelle
Eine Möglichkeit besteht darin, ein
DateTime
Objekt zu erstellen und es zum Formatieren zu verwenden:So weiß ich es. Ich hoffe, jemand kann einen besseren Weg vorschlagen.
quelle
Einfach. Verwendung
TimeSpan.ToString
mit c, g oder G. Weitere Informationen unter MSDNquelle
Ich würde mit gehen
quelle
Es funktioniert für Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
quelle
Persönlich mag ich diesen Ansatz:
Sie können dies ohne Probleme so individuell gestalten, wie Sie möchten:
quelle
Das ist großartig:
quelle
Sie können auch gehen mit:
BEARBEITEN:
Sie können sich auch Strings.Format ansehen .
quelle
Alle Literalzeichen müssen maskiert werden.
quelle
Ich habe den folgenden Code verwendet. Es ist lang, aber dennoch ein Ausdruck und erzeugt eine sehr freundliche Ausgabe, da es keine Tage, Stunden, Minuten oder Sekunden ausgibt, wenn sie den Wert Null haben.
In der Probe wird die Ausgabe "4 Tage 1 Stunde 3 Sekunden" erzeugt.
quelle
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Nennen Sie das für jede Komponente (z. B.timeComponent(sp.Days, "day")
) undString.join
fügen Sie dann die Leerzeichen ein.Ich benutze diese Methode. Ich bin Belgier und spreche Niederländisch, so dass mehrere Stunden und Minuten nicht nur 's' am Ende hinzufügen, sondern fast ein anderes Wort als Singular.
Es mag lang erscheinen, ist aber meiner Meinung nach sehr gut lesbar:
quelle
Dies ist der Ansatz, den ich selbst bei der bedingten Formatierung verwendet habe. und ich poste es hier, weil ich denke, dass dies ein sauberer Weg ist.
Beispiel für Ausgänge:
Die Formatierung ist einfach.
time.Days:#0:;;\\
Das vorherige Format;;
ist für den Fall, dass der Wert positiv ist. negative Werte werden ignoriert. und für Nullwerte haben wir;;\\
, um es in formatierten Zeichenfolgen zu verbergen. Beachten Sie, dass der maskierte Backslash erforderlich ist, da er sonst nicht korrekt formatiert wird.quelle
Hier ist meine Erweiterungsmethode :
Beispielaufruf:
Ausgabe:
quelle
Dies ist ein Problem in VS 2010, hier ist meine Problemumgehungslösung.
quelle
Die
Substring
Methode funktioniert perfekt, wenn Sie nur die Stunden: Minuten: Sekunden möchten. Es ist einfacher, sauberer Code und leicht zu verstehen.quelle
Hier ist meine Version. Es zeigt nur so viel wie nötig, behandelt Pluralisierung, Negative und ich habe versucht, es leicht zu machen.
Ausgabebeispiele
Code
quelle
Wenn Sie das Dauerformat ähnlich wie bei YouTube möchten, geben Sie die Anzahl der Sekunden an
Ausgabe:
quelle
Ich wollte eine Zeichenfolge wie "1 Tag 2 Stunden 3 Minuten" zurückgeben und auch berücksichtigen, ob beispielsweise Tage oder Minuten 0 sind und sie dann nicht anzeigen. Vielen Dank an John Rasch für seine Antwort, von der meine kaum eine Erweiterung ist
quelle