2011-01-17 7 views
11

मेरे पास एक टाइमपैन है, ts, जिसमें ज्यादातर मिनट और सेकंड होते हैं, लेकिन कभी-कभी घंटे होते हैं। मैं ts चाहते हैं एक स्वरूपित स्ट्रिंग है कि निम्न परिणाम दे देंगे वापस जाने के लिए:वैकल्पिक समय के साथ टाइमस्पेन प्रारूपस्ट्रिंग

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

अब तक मेरे पास है:

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

लेकिन यह ऊपर परिणाम दे नहीं कर रहा है। मैं अपने इच्छित परिणामों को कैसे प्राप्त कर सकता हूं?

+0

आप क्या चाहते हैं और आपको क्या मिलता है यह स्पष्ट नहीं है? –

+0

मैं प्रारूपस्ट्रिंग की तलाश में हूं जो उपरोक्त प्रारूप के साथ एक स्ट्रिंग वापस कर देगा। – frenchie

उत्तर

6

कुछ मुझे नहीं लगता कि एक भी प्रारूप स्ट्रिंग आप दे देंगे तुम क्या चाहते हो चाहते हैं, लेकिन उत्पादन खुद के निर्माण के लिए एक सरल काम नहीं है:

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

संपादित करें: बेहतर विचार!

तुम इतनी तरह TimeSpan वर्ग पर एक विस्तार विधि उपरोक्त विधि बना सकता है:

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

तब उपयोग करते हुए इस ts.ToMyFormat() लागू के रूप में सरल है।

+0

मुझे विस्तार विधि बनाने का विचार पसंद है !! – frenchie

+0

एक छोटी तर्क बग है; यदि सेकंड 0 और 9 के बीच हैं, तो 5 मिनट और 3 सेकंड का आउटपुट 5:03 के बजाय 5: 3 जैसा दिखता है। मैं इस पर काम कर रहा हूँ। मुझे दिखाने के लिए धन्यवाद कि विस्तार विधियां कैसे काम करती हैं; आप उनके बारे में पढ़ते हैं लेकिन जब आप पहली बार अपना खुद का निर्माण करते हैं, तो आप देखते हैं कि वे वास्तव में आपके लिए कैसे काम करते हैं। धन्यवाद। – frenchie

+0

यहां सेकंड के लिए है: यदि (ts.Seconds <10) {sb.Append (": 0"); } अन्य {sb.Append (":"); } – frenchie

10

हो सकता है कि आप की तरह

string TimeSpanText = string.Format(
    MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}", 
    MyTimeSpan); 
संबंधित मुद्दे