2010-03-05 7 views
9

He intentado buscar here, pero no me podría ayudar mucho ..
Quiero convertir time_span de cadena, no quiero devolver el intervalo de tiempo en días .. pero sólo HH: mm: ss. ¿Cómo lograr eso?cómo lograr un intervalo de tiempo para la conversión de cadenas?

Mi código de ejemplo está aquí:

   String time_span_par = "06:12:40"; 
       String time_str = "18:13:59"; 
       TimeSpan time_span_var = TimeSpan.Parse(time_span_par); 
       TimeSpan time_span = TimeSpan.Parse(time_str); 

       time_span = time_span.Add(time_span_var); 
       string temp = time_span.ToString("HH:mm:ss"); 
+0

¿Eso significa que quiere agregar 18 horas a 6 horas? ¿No sería otro día entonces? – shahkalpesh

+0

Ya, pero no quiero el día ... 0 horas es suficiente para mostrar ... –

Respuesta

17

Trate de usar

DateTime d = new DateTime(time_span.Ticks); 
string time = d.ToString("HH:mm:ss"); 
+0

hola @astander, Su respuesta también es aceptable ... Pero a mí personalmente me gustó el código de una línea ... –

+5

@infant programmer, esta también puede ser unidireccional, puede combinar las dos expresiones en una línea: 'string time = new DateTime (time_span.Ticks) .ToString (" HH: mm: ss ");' – CMS

+0

@cms, ok ... luego aceptado . Solo estaba evitando la declaración de otra variable. –

6

Esto debería funcionar:

string temp = string.Format("{0}:{1}:{2}", 
    time_span.Hours.ToString(), time_span.Minutes.ToString(), 
    time_span.Seconds.ToString()); 

Según comentario si desea que los dos dígitos que podría hacer:

string temp = string.Format("{0}:{1}:{2}", 
    time_span.Hours.ToString("00"), time_span.Minutes.ToString("00"), 
    time_span.Seconds.ToString("00")); 

Editado: de acuerdo con el comentario de la barreta,

string temp = string.Format("{0:00}:{1:00}:{2:00}",time_span.Hours, time_span.Minutes, time_span.Seconds); 
+2

¿Eso no le dará? cosas como "1: 2: 6" para <10 porciones? –

+1

Sí lo hará :) Agregó el formato para dígitos dobles. – Kelsey

+2

string.Format ("{0:00}: {1:00}: {2:00}", time_span.Hours, time_span.Minutes, time_span.Seconds); – Jimmy

1

simplemente convertir el valor de las garrapatas en una fecha y hora y luego usar su ToString()

var date1 = DateTime.Now; 
var date2 = DateTime.Now.AddSeconds(-1000); 
var diff = date1 - date2; 
var temp = new DateTime(diff.Ticks).ToString("HH:mm:ss") 
+0

+1, gracias por la respuesta, –

3

Prueba esto:

time_span = time_span.Add(time_span_var); 
    string temp = time_span.ToString(); 
    temp = string.Format("{0}:{1}:{2}", time_span.TotalHours, time_span.TotalMinutes, time_span.TotalSeconds); 

E dit Después de leer su comentario sobre su pregunta, es decir, necesita mostrar cero horas para días nuevos, mi respuesta le dará el total de horas, minutos y segundos, no lo que desea.

(+1) Kelseys;)

+1

No puede usar 'TotalHours',' TotalMinutes', etc. ya que se calculan de forma independiente abarcando todo el valor. También solo estoy haciendo un ToString() en las salidas del timespan: '1.00: 26: 3' donde mi versión muestra:' 00: 26: 39'. – Kelsey

+0

Gracias Kelsey;) Tu respuesta es realmente la mejor para su pregunta. Edité mi respuesta anterior antes de actualizar mi página con tu comentario. Gracias de todas formas. –

1
String time_span_par = "06:12:40"; 
String time_str = "18:13:59"; 
TimeSpan time_span_var = TimeSpan.Parse(time_span_par); 
TimeSpan time_span = TimeSpan.Parse(time_str); 

TimeSpan finalTime = (time_span_var + time_span); 
Console.WriteLine(finalTime); 
Console.WriteLine(finalTime - TimeSpan.FromHours(finalTime.Days * 24)); 
+0

Impresionante ... :-) +1 –

3

El código que he implementado es:

  string temp = DateTime.Today.Add(time_span).ToString("HH:mm:ss"); 

Iniciado por Marc Gravell,

+0

¿Por qué implementó una respuesta y aceptó una diferente? – Jimmy

+0

Esto no es mi propia respuesta ... así que no quiero tomar el crédito, y también me gustaría valorar a otros ayudando a la actitud y el esfuerzo realizados .. :-) –

+0

Y también vale la pena implementar la solución aceptada .. –

0

Si el número de días es irrelevante, entonces tener la solución, sin embargo, me encontré con esta respuesta en busca de una conversión que dio horas en total, por lo que 36 horas deberían mostrarse como 36:00:00. El uso de algunos de los consejos anteriores esto es lo que ocurrió:

SomeLabel.Text = Math.Floor(ts.TotalHours).ToString() + ":" + ts.Minutes.ToString("D2") + ":" + ts.Seconds.ToString("D2"); 

Horas totales siempre se redondea hacia abajo, minutos y segundos se rellenan a ser de 2 dígitos (00 - 09)

3

Hay una manera mucho Una forma más simple de hacer esto ahora (aunque solo sea usando Framework 4), solo necesita usar la cadena literalmente, y puede hacerlo directamente en la instancia de TimeSpan.

time_span.ToString(@"hh\:mm\:ss") 

Esa es la salida

00:26:39 

útil para las personas que tropiezan ahora a través de este (como yo).

Saludos :)

Cuestiones relacionadas