2011-01-17 2 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

위 형식으로 문자열을 반환하는 형식 문자열을 찾고 있습니다. – 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시 3 분 대신 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);