2012-02-15 20 views
11

Disculpe el código aproximado, estoy tratando de mostrar la duración de los videos dado el tiempo en segundos. He tenido un ir abajo pero no está funcionando correctamente.mostrar el intervalo de tiempo muy bien

Quiero que se muestre bien, es decir, debería mostrar 9m: 59s no 09m: 59s.

Si las horas son cero no mostrar horas, si los minutos son cero no mostrar minutos.

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

¿cuál es tu pregunta? o ¿qué esperas que pase y qué pasa? por favor no esperes que adivine :) – Alex

+0

la pregunta es la duración del tiempo de visualización muy bien dados los segundos. si las horas son cero, no muestre las horas, si los minutos son cero, no muestre los minutos, también lo desearía en formato de 9 m: 59 s, no de 09 m: 59 s para los minutos de una sola figura. – raklos

+0

Sus cadenas de formato son incorrectas, no hay un especificador "m" o "h". Consulte [MSDN] (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx). ¡Solo se trata de "números", no de "minutos/segundos"! Además, no necesita especificar explícitamente "2 lugares" para valores> 10. –

Respuesta

24

Algo así como:

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

¿Por qué usar 't.TotalHours' cuando puede usar' t.Hours'? –

+4

@FandiSusanto Si el período de tiempo es "1 día y 2 horas", TotalHours devolverá 26, Horas devolverá 2. –

2

Según msdn intente esto:

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

Creo que se puede simplificar esto quitando el aspecto "D2" del formato y luego has ganado No necesita un caso especial para la opción de menos de diez minutos. Básicamente solo usando

string.Format("{0}m:{1}s", t.Minutes, t.Seconds); 

obtendrá uno o dos dígitos según sea necesario. Así que su último caso es:

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
Cuestiones relacionadas