2011-05-20 11 views
9

Quiero guardar las horas trabajadas del usuario en una columna de base de datos varchar, pero de forma predeterminada, el valor formateado incluye días si el número de horas es más de 24. Solo quiero el número total de horas.¿Cómo puedo formatear un intervalo de tiempo para mostrarme el total de horas?

Por ejemplo: si un usuario trabaja hoy a las 10:00:00 horas, luego a las 13:00:00 horas de mañana y a las 3:30:00 horas pasado mañana, el total formateado que deseo es 26:30: 00. En cambio, estoy viendo 1.2: 30: 00.

¿Cómo puedo obtener el formato que quiero?

Además, cuando guardo manualmente el valor 40:00:00 en la base de datos y trato de leerlo en un TimeSpan, aparece un error.

¿Cómo puedo guardar las horas en la base de datos de la manera que quiero, y todavía ser capaz de leerlo de nuevo en un TimeSpan después?

+0

lo preguntas acerca de los datos en la base de datos o la estructura 'TimeSpan' en el BCL? Tu pregunta es confusa – Oded

+0

Como se sugiere [aquí] (http://stackoverflow.com/a/744929/897326), es mejor guardar los ticks en la base de datos, en lugar de un TimeSpan formateado. Entonces no tienes este problema. – Neolisk

+0

Vote por la sugerencia de característica, luego espere una década para que MS lo haga: http://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/4050034-add-standard-formats-to -timespan-which-allow-the-f –

Respuesta

12

Trate TimeSpan.TotalHours

String timeStamp = "40:00:00"; 
var segments = timeStamp.Split(':'); 

TimeSpan t = new TimeSpan(0, Convert.ToInt32(segments[0]), 
       Convert.ToInt32(segments[1]), Convert.ToInt32(segments[2])); 
string time = string.Format("{0}:{1}:{2}", 
      ((int) t.TotalHours), t.Minutes, t.Seconds); 
+0

@Bala es algo así que ... (40.166666663) (es un ejemplo) y ¿cómo convierto esto 40:00:00 a timespan? intenté timespan x = timespan.Parse ("40:00:00"); obtiene un error – angel

+0

@angel 'TimeSpan.FromHours (40.0);' –

+0

@angel para el problema 40.166666, puede usar TimeSpan.TotalHours como integet y luego TimeSpan.Minutes y TimeSpan.Seconds para formatear la cadena de la forma que desee . –

10

Se podría hacer algo como:

TimeSpan time = ...; 
string timeForDisplay = (int)time.TotalHours + time.ToString(@"\:mm\:ss"); 
+0

time = ??? no puedo escribir el tiempo = "40:00:00 "y no puedo analizarlo – angel

+3

en serio? ...' TimeSpan time = TimeSpan.FromHours (40) + TimeSpan.FromMinutes (30) ' – CodingWithSpike

+3

O incluso más fácil:' TimeSpan time = new TimeSpan (40, 30, 0) 'http://msdn.microsoft.com/en-us/library/bk8a3558.aspx – CodingWithSpike

Cuestiones relacionadas