2011-01-17 14 views
11

Mam przedział czasowy, ts, który ma przeważnie minuty i sekundy, ale czasami godziny. Chciałbym ts zwraca sformatowany ciąg znaków, który będzie dać następujące wyniki:TimeSpan FormatString z opcjonalnymi godzinami

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

Do tej pory mam:

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

ale to nie daje powyższe wyniki. Jak mogę osiągnąć pożądane rezultaty?

+0

Co chcesz, a co otrzymasz, nie jest jasne? –

+0

Szukam łańcucha formatującego, który zwróci ciąg znaków w powyższym formacie. – frenchie

Odpowiedz

6

Nie sądzę pojedynczy format string da Ci to, co chcesz, ale budowanie wyjście samemu jest prostym zadaniem:

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(); 
} 

EDYCJA: lepszy pomysł!

Można zrobić metodę powyżej metodę rozszerzenia na klasy TimeSpan tak:

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

Następnie przy użyciu tego jest tak proste, jak wywoływanie ts.ToMyFormat().

+0

Uwielbiam pomysł stworzenia metody przedłużenia! – frenchie

+0

Istnieje jeden mały błąd logiczny; jeśli sekundy są pomiędzy 0 a 9, wynik 5 minut i 3 sekund wygląda jak 5: 3 zamiast 5:03. Pracuję nad tym. Dziękuję za pokazanie mi, jak działają metody rozszerzeń; Czytasz o nich, ale kiedy budujesz swój własny po raz pierwszy, widzisz, jak oni naprawdę pracują dla ciebie. Dzięki. – frenchie

+0

Oto sekundy: if (ts.Seconds <10) {sb.Append (": 0"); } else {sb.Append (":"); } – frenchie

10

Może chcesz coś

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