2011-01-17 12 views
11

Ich habe eine Zeitspanne, ts, die meistens Minuten und Sekunden hat, aber manchmal Stunden. Ich würde ts wie eine formatierte Zeichenfolge zurückzugeben, die die folgenden Ergebnisse geben werde:TimeSpan FormatString mit optionalen Stunden

3:30 (hours not displayed, showing only full minutes) 
13:30 
1:13:30 (shows only full hours instead of 01:13:30) 

Bisher habe ich:

string TimeSpanText = string.Format("{0:h\\:mm\\:ss}", MyTimeSpan); 

aber es ist nicht die oben genannten Ergebnisse. Wie kann ich die gewünschten Ergebnisse erzielen?

+0

Was Sie wollen und was Sie bekommen, ist nicht klar? –

+0

Ich suche nach dem Formatstring, der eine Zeichenfolge mit dem obigen Format zurückgibt. – frenchie

Antwort

6

Ich glaube nicht eine einzige Format-String wird dir geben, was Sie wollen, aber den Aufbau der Ausgabe selbst ist eine einfache Aufgabe:

public string FormatTimeSpan(TimeSpan ts) 
{ 
    var sb = new StringBuilder(); 

    if ((int) ts.TotalHours > 0) 
    { 
     sb.Append((int) ts.TotalHours); 
     sb.Append(":"); 
    } 

    sb.Append(ts.Minutes.ToString("m")); 
    sb.Append(":"); 
    sb.Append(ts.Seconds.ToString("ss")); 

    return sb.ToString(); 
} 

EDIT: Bessere Idee!

Sie könnten das Verfahren über eine Erweiterungsmethode auf dergleichen so TimeSpan Klasse machen:

public static class Extensions 
{ 
    public static string ToMyFormat(this TimeSpan ts) 
    { 
     // Code as above. 
    } 
} 

Dann mit diesem als Aufruf ts.ToMyFormat() so einfach ist.

+0

Ich liebe die Idee, eine Erweiterungsmethode zu erstellen !! – frenchie

+0

Es gibt einen kleinen logischen Fehler; Wenn die Sekunden zwischen 0 und 9 liegen, sieht die Ausgabe von 5 Minuten und 3 Sekunden wie 5: 3 statt 5:03 aus. Ich arbeite dran. Danke, dass Sie mir gezeigt haben, wie Erweiterungsmethoden funktionieren. Sie lesen über sie, aber wenn Sie Ihr eigenes zum ersten Mal bauen, sehen Sie, wie sie wirklich für Sie arbeiten. Vielen Dank. – frenchie

+0

Hier ist für die Sekunden: if (ts.Seconds <10) {sb.Append (": 0"); } else {sb.Append (":"); } – frenchie

10

Vielleicht wollen Sie so etwas wie

string TimeSpanText = string.Format(
    MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}", 
    MyTimeSpan); 
Verwandte Themen