2009-03-03 18 views
5

tengo un valor minuto y quiero tener a 2 Cadena Valores uno con cuántas horas y el otro con los minutos, por ejemplo:Calcular minutos y horas

Valor - 121 minutos horas

de cuerda = 2
minutos string = 1

Value - 58 minutos

horas string = 0
cadena minutos = 58

¿Cómo puedo resolver esto en C#?

Respuesta

34
var span = System.TimeSpan.FromMinutes(121); 
var hours = ((int)span.TotalHours).ToString();  
var minutes = span.Minutes.ToString(); 

El ToString() se debe a que pidió valores de cadena ...

totalhours son las horas completas en el TimeSpan, pueden ser campo de más de 24 (mientras que las "Horas" tiene un máximo de 24)

Ah, y pensándolo bien: ¿Por qué utilizar el TimeSpan y no calcularlo usted mismo? Debido a que TimeSpan ya está allí depurado & probado por Microsoft, tiene una interfaz limpia y bonita (al mirar el código puede ver fácilmente qué sucede sin tener que seguir un cálculo mentalmente) y se extiende fácilmente a otras soluciones. (Tenga la entrada en cuestión de segundos Use TimeSpan.FromSeconds() ¿Quieres el día Utilice span.TotalDays ...?.?)

Actualizar:

me he dado cuenta de error en mi respuesta: totalhours retornos un valor fraccionario de todas las horas, por lo que debemos truncarlo en un entero antes de convertirlo en una cadena.

+0

Esto no rellenará minutos con ceros. Agregar ToString ("00") debería arreglarlo. – Coincoin

+0

@ Coating: observe el ejemplo de OP durante 121 minutos. No se requiere relleno. –

+0

Mi error. Gracias por mencionarlo. – Coincoin

2
int value = 121; 
int hours = value/60; // 2 
int minutes = value % 60; // 1 

string strHours = hours.ToString(); 
string strMinutes = minutes.ToString(); 
+0

Usar TimeSpan es la manera OO, pero esto es corto y dulce. – spoulson

+0

Miré en TimeSpan usando Reflector: todos los resultados se cuentan por multiplicación de milisegundos marcados. ¡Creo que mi método puede ser más rápido! – abatishchev

8

Utilice una estructura Timespan y su método Parse.

+0

Dijo que tenía un minuto y quería convertirlo en cuerdas, y no al revés. – froh42

+0

Timespan sigue siendo el camino a seguir. –

1
int value = 121; 
int hours = value/60; 
int minutes = value % 60; 
+0

¿Por qué el voto a favor? Esta es una forma perfectamente válida de obtener horas/minutos a partir de un valor de minutos totales y es la misma que la respuesta de abatishchev, excepto el .ToString() – CraigTP

+0

+1 para contrarrestar el -1 – Davy8

+0

No lo hice -1 a nadie :) –

0
int value = 121; 
TimeSpan timeSpan = TimeSpan.FromMinutes(value); 

// gives you the rounded down value of 2 
int hours = timeSpan.Hours; 

// gives you the minutes left of the hour 
int minutes = value - (hours * 60); 
+0

¿Por qué no utilizar TimeSpan.Minutes aquí? Esto devolverá 1 en este caso, a diferencia de TimeSpan.TotalMinutes que devuelve 121 –

+0

En realidad, TotalMinutes devuelve un doble que podría devolver 121.3523 o algún número si está haciendo una diferencia en la fecha. Lo cual, sí, se convertiría en 121 si está transfiriendo a un Int32. TimeSpam.Minutes No hice la prueba. Pero, si devuelve "1" en lugar de "121", entonces eso es todo. – eduncan911

Cuestiones relacionadas