2012-07-20 10 views
15

Estoy compilando en C# usando .NET 3.5 y estoy tratando de convertir un TimeSpan en una cadena y formatear la cadena. Me gustaría utilizarCómo formatear TimeSpan en cadena antes de .NET 4.0

myString = myTimeSpan.ToString("c");

sin embargo, el método de TimeSpan.ToString no toma una cadena de formato como un argumento hasta .NET 4.0 y estoy usando .NET 3.5.

¿Cómo formatearía un TimeSpan como una cadena? Mi objetivo final es mostrar TimeSpan en el formato hh:mm:ss pero actualmente estoy recibiendo hh:mm:ss:fffffff.

He intentado usar

myString = string.Format("{0:hh:mm:ss}", myTimeSpan);

pero string.Format sólo es formatear la fecha y hora y pasar diferentes cadenas de formato no funciona cuando se trata de dar formato a un intervalo de tiempo.

+4

@John: Esa no es una solución. –

+0

Este enlace puede ayudarlo: http://stackoverflow.com/questions/840120/timespan-formatting –

+1

http://stackoverflow.com/a/574894/1028323 Responde su pregunta. – Alex

Respuesta

18

Una forma podría ser:

TimeSpan ts = DateTime.Now - DateTime.Now.AddHours(-10); 
Console.WriteLine(string.Format("{0:00}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds)); 

El resultado sería algo así como:

09:59:59 

EDIT:

o puede probar:

TimeSpan ts = DateTime.Now - DateTime.Now.AddHours(-10); 
DateTime mydate = new DateTime(ts.Ticks); 
Console.WriteLine(mydate.ToString(("hh:mm:ss"))); 

salida sería :

09:59:59 
+2

Probablemente quiera usar '" {0}: {1:00}: {2:00} "' ... – Joey

+0

@Joey, perfecto, modifiqué mi respuesta – Habib

0

Mejor es 24 * ts.Días + t.Horas que ts.TotalHoras. Comparar:

var ts = TimeSpan.FromHours(23.9); 
Console.WriteLine(ts); 
Console.WriteLine("{0:00}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds); 
Console.WriteLine("{0}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds); 
Console.WriteLine("{0}:{1:00}:{2:00}", 24*ts.Days+ts.Hours, ts.Minutes, ts.Seconds);