2012-02-15 27 views
11

Przepraszam za trudny kod, próbuję wyświetlić czas trwania filmów z podaniem czasu w sekundach. Udało mi się przejść poniżej, ale to nie działa poprawnie.czas wyświetlania ładnie

Chcę, żeby ładnie się wyświetlała - tzn. Powinna wyświetlać 9m: 59s, a nie 09m: 59s.

Jeśli godziny są równe zero, nie wyświetlaj godzin, jeśli minuty są równe zero, nie wyświetlaj minut.

public static string GetTimeSpan(int secs) 
{ 
    TimeSpan t = TimeSpan.FromSeconds(secs); 

    string answer; 
    if (secs < 60) 
    { 
     answer = string.Format("{0:D2}s", t.Seconds); 
    } 
    else if (secs < 600)//tenmins 
    { 
     answer = string.Format("{0:m}m:{1:D2}s", t.Minutes, t.Seconds); 

    } 
    else if (secs < 3600)//hour 
    { 
     answer = string.Format("{0:mm}m:{1:D2}s", t.Minutes, t.Seconds); 
    } 
    else 
    { 
     answer = string.Format("{0:h}h:{1:D2}m:{2:D2}s", 
            t.Hours, 
            t.Minutes, 
            t.Seconds); 
    } 

    return answer; 
} 
+0

więc to, co jest Twoje pytanie? lub co się stanie i co się stanie? proszę nie spodziewajcie się, że zgadnę :) – Alex

+0

pytanie wyświetla czas trwania ładnie biorąc pod uwagę sekundy. jeśli godziny są zerowe, nie wyświetlaj godzin, jeśli minuty są zerowe, nie wyświetlaj minut, również w formacie 9m: 59s, a nie 09m: 59s dla pojedynczych minut. – raklos

+0

Łańcuchy w formacie są błędne, nie ma specyfikatora "m" lub "h". Patrz [MSDN] (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx). Po prostu zajmujesz się "liczbami", a nie "minutami/sekundami"! Nie musisz również jawnie określać "2 miejsca" dla wartości> 10. –

Odpowiedz

24

Coś jak:

public static string PrintTimeSpan(int secs) 
{ 
    TimeSpan t = TimeSpan.FromSeconds(secs); 
    string answer; 
    if (t.TotalMinutes < 1.0) 
    { 
    answer = String.Format("{0}s", t.Seconds); 
    } 
    else if (t.TotalHours < 1.0) 
    { 
    answer = String.Format("{0}m:{1:D2}s", t.Minutes, t.Seconds); 
    } 
    else // more than 1 hour 
    { 
    answer = String.Format("{0}h:{1:D2}m:{2:D2}s", (int)t.TotalHours, t.Minutes, t.Seconds); 
    } 

    return answer; 
} 
+0

Dlaczego używać 't.TotalHours', kiedy możesz użyć' t.Hours'? –

+4

@FandiSusanto Jeśli czas trwania wynosi "1 dzień i 2 godziny", TotalHours zwróci 26, Godziny zwrócą 2. –

2

Według msdn spróbuj tego:

if (secs < 60) 
{ 
    answer = t.Format("s"); 
} 
else if (secs < 600)//tenmins 
{ 
    answer = t.Format("m:s"); 
} 
// ... 
3

myślę, że można uprościć ten usuwając "D2" aspekt formacie, a następnie wygrał Potrzebny jest specjalny przypadek dla opcji poniżej dziesięciu minut. Zasadniczo po prostu otrzymasz jedną lub dwie cyfry zgodnie z wymaganiami, używając tylko . Więc sprawa jest ostateczna:

string.Format("{0}h:{1}m:{2}s", t.Hours, t.Minutes, t.Seconds); 
1
readonly static Char[] _colon_zero = { ':', '0' }; 
// ... 

var ts = new TimeSpan(DateTime.Now.Ticks); 
String s = ts.ToString("h\\:mm\\:ss\\.ffff").TrimStart(_colon_zero); 
.0321 
6.0159 
19.4833 
8:22.0010 
1:04:2394 
19:54:03.4883
Powiązane problemy