Format TimeSpan größer als 24 Stunden
Sagen, dass ich konvertieren einige Sekunden in die TimeSpan-Objekt wie folgt:
Dim sec = 1254234568
Dim t As TimeSpan = TimeSpan.FromSeconds(sec)
Wie formatiere ich das TimeSpan-Objekt in ein format wie folgt:
>105hr 56mn 47sec
Gibt es eine eingebaute Funktion, oder muss ich das schreiben einer benutzerdefinierten Funktion?
InformationsquelleAutor der Frage Maxd | 2010-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, die einfachste Sache zu tun ist, um dieses format von sich aus, z.B.
In VB:
Ich weiß nicht, ob die
TimeSpan
Formatierung .NET 4 würde machen dies einfacher.InformationsquelleAutor der Antwort Jon Skeet
Microsoft nicht (aktuell) haben ein einfaches format-string-Verknüpfung. Die einfachsten Optionen, die bereits geteilt wurde.
Jedoch eine allzu Gründliche Möglichkeit ist die Umsetzung Ihrer eigenen
ICustomFormatter
fürTimeSpan
. Ich würde es nicht empfehlen, es sei denn, Sie verwenden Sie diese so oft, dass es sparen Sie Zeit auf lange Sicht. Es gibt jedoch Zeiten, in denen Sie eine Klasse schreiben, wo schreiben Sie Ihre eigenenICustomFormatter
geeignet ist, so schrieb ich dieses als ein Beispiel.Beachten Sie, wie in den hinweisen im code,
TimeSpan.ToString(format, myTimeSpanFormatter)
wird nicht funktionieren, aufgrund eines Fehlers der .NET Framework, so dass Sie immer über die Verwendung von string.Format(format, myTimeSpanFormatter) um diese Klasse zu verwenden. Sehen Wie erstellen und verwenden einer benutzerdefinierten IFormatProvider für DateTime?.BEARBEITEN:
Wenn Sie wirklich, und ich meine wirklich, funktionieren soll, mit
TimeSpan.ToString(string, TimeSpanFormatter)
können Sie fügen Sie den folgenden, um die obenTimeSpanFormatter
Klasse:Und fügen Sie die folgende Klasse irgendwo im gleichen Namensraum:
Nachdem diese, können Sie
wo
{000.00}
ist, aber Sie wollen die TotalHours int oder double formatiert werden. Hinweis: die geschweifte Klammern, die nicht da sein sollte, in der Zeichenfolge.Format() Fall. Beachten Sie auch,formatter
muss erklärt (oder cast) alsICustomFormatter
eher alsTimeSpanFormatter
.Übermäßige? Ja. Genial? Uhhh....
InformationsquelleAutor der Antwort dfoverdx
string.Format("{0}hr {1}mn {2}sec", (int) t.TotalHours, t.Minutes, t.Seconds);
InformationsquelleAutor der Antwort Jason Williams
Müssen Sie möglicherweise, um die Berechnung der Stunden. Die Reihe für die Stunden, in der Zeitspanne.ToString ist nur 0-23.
Schlimmsten werden Sie brauchen, ist zu tun, raw-string-Formatierung a la Jon Skeet.
InformationsquelleAutor der Antwort John
Können Sie versuchen, diese:
InformationsquelleAutor der Antwort daniell89
Versuchen, diese Funktion:
Konvertieren Sie Eine Zeitspanne In Stunden Und Minuten
InformationsquelleAutor der Antwort Angkor Wat
Möchten Sie vielleicht zu prüfen, mit Noda Zeit's
Duration
geben.Beispiel:
Oder
Können Sie dann einfach das format als string, so wie hier:
Alternativ können Sie die Muster-basierte API statt:
Den Vorteil mit dem Muster-API ist, dass Sie nur brauchen, um das Muster einmal. Wenn Sie eine Menge von Werten zu analysieren und zu formatieren, kann es einen erheblichen performance-Vorteil.
InformationsquelleAutor der Antwort Matt Johnson
Meine Lösung ist:
InformationsquelleAutor der Antwort alansiqueira27
MS-Excel-andere-format unterscheidet .NET.
Überprüfen Sie diesen Link http://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt8
Erstelle ich eine einfache Funktion zum konvertieren einer Zeitspanne in ein DateTime mit dem MS Excel-format
und Sie müssen formatieren Sie die Zelle wie diese:
InformationsquelleAutor der Antwort oaamados
Als pro (https://msdn.microsoft.com/en-us/library/1ecy8h51(v=vs. 110).aspx), die Standard ToString() Methode für ein TimeSpan-Objekt verwendet die "c" formatieren, was bedeutet, dass standardmäßig, eine Zeitspanne, die länger als 24 Stunden sieht so etwas wie "1.03:14:56", wenn die Ausgabe auf einer razor-Ansicht. Dies verursachte einige Verwirrung bei meinen Kunden, die nicht verstehen, dass die "1." steht für einen Tag.
So, wenn Sie verwenden können, interpolierte strings (C#6+), eine einfache Möglichkeit, die ich kam mit, um die Erhaltung der Formatierung so viel wie möglich, während der Verwendung TotalHours anstatt in Tagen+Stunden ist es, ein get property zur Ausgabe der Uhrzeit als formatierten string, etwa so:
Das Ergebnis dieser mit der gleichen Zeit wie oben wird "27:14:56".
InformationsquelleAutor der Antwort Michael Villere