2011-01-17 27 views
11

Zaman zamanım, ts, genellikle dakikalar ve saniyeler, bazen saatlerdir.TimeSpan BiçimString İsteğe bağlı saatlerde

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

Şimdiye kadar var:

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

ama yukarıdaki sonuçlar vermiyor ben şu sonuçları vereceğiz biçimlendirilmiş dize dönmek ts istiyorum. İstediğim sonuçları nasıl alabilirim?

+0

Ne istiyorsun ve ne alıyorsun? –

+0

Yukarıdaki formata bir dize döndürecek formatı arıyorum. – frenchie

cevap

6

gibi bir şey ben tek biçim dizesi istediğini verecek sanmıyorum istiyorum, ama çıkış kendinizi bina basit bir iştir:

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

DÜZENLEME: Daha iyi bir fikir!

Öyle gibi TimeSpan sınıfı bir uzantısı yöntemiyle yukarıdaki yöntemi yapabiliriz:

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

O zaman bu ts.ToMyFormat() çağırma kadar basittir kullanarak.

+0

Bir uzantı yöntemi yaratma fikrini çok seviyorum !! – frenchie

+0

Bir küçük mantık hatası var; saniye 0 ile 9 arasındaysa, 5 dakika ve 3 saniyelik çıkış 5:03 yerine 5: 3 gibi görünür. Üzerinde çalışıyorum. Uzantı yöntemlerinin nasıl çalıştığını gösterdiğiniz için teşekkür ederiz; Onları okuyorsunuz ama ilk kez kendi yapınızı kurduğunuzda, sizin için gerçekten nasıl çalıştığını görüyorsunuz. Teşekkürler. – frenchie

+0

Şu an için: if (ts.Seconds <10) {sb.Append (": 0"); } else {sb.Append (":"); } – frenchie

10

Belki

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