2011-01-17 13 views
11

私は時差があり、ほとんどの場合分と秒がありますが、時には時間があります。tsです。TimeSpan FormatString(オプション時間あり)

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

を、それ以上の結果を与えていない 私は、次のような結果が得られますフォーマットされた文字列を返すようにtsをしたいと思います。私が望む結果をどのように達成できますか?

+0

あなたが望むものは何ですか? –

+0

私は上記のフォーマットの文字列を返すformatstringを探しています。 – 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(); 
} 

編集:良いアイデア!そして、これを使用するとts.ToMyFormat()を呼び出すのと同じくらい簡単です

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

:あなたはとてもようTimeSpanクラスに拡張メソッド上記の方法を作ることができ

+0

私は拡張メソッドを作成するというアイデアが大好きです!! – frenchie

+0

ロジックバグが少しあります。秒が0〜9の場合、5分3秒は5時03分でなく5時3分になります。私はそれに取り組んでいます。拡張メソッドの仕組みを教えてくれてありがとう。あなたはそれらについて読むことができますが、初めて自分自身を構築するとき、彼らはあなたが本当にどのように働くかを見ています。ありがとう。 – frenchie

+0

ここは秒です:if(ts.Seconds <10) {sb.Append( ":0"); } else {sb.Append( ":"); } – frenchie

10

はたぶん、あなたは

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