Calcular cuántos minutos hay entre dos tiempos

86

Tengo una vista de cuadrícula de datos en mi aplicación que contiene las horas de inicio y finalización. Quiero calcular la cantidad de minutos entre estos dos tiempos. Hasta ahora tengo:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

Pero la última línea no se compilará porque dice que estoy usando argumentos no válidos para el constructor Timespan. He investigado bastante sobre cómo calcular la cantidad de minutos entre dos tiempos, pero me estoy golpeando un poco con una pared de ladrillos. ¿Puede alguien aconsejarme sobre la mejor manera de lograr mi objetivo?

EDITAR/

Ahora mi código es el siguiente:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

Pero obtengo un yeso inválido en la segunda línea. Tanto varFinish como varValue son tiempos, por ejemplo, 10:00 y 8:00 dicen. Entonces, ¿no estás seguro de por qué no emiten para escribir DateTime?

PJW
fuente
Si varFinish es una cadena, no puede convertir una cadena en un DateTime. Necesita usar DateTime.Parse (...). Incluso entonces, implicará la fecha de hoy si no hay fecha en varFinish.
Jim

Respuestas:

160

Prueba esto

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

Editar: Si está probando 'span.Minutes', esto devolverá solo los minutos del intervalo de tiempo [0 ~ 59], para devolver la suma de todos los minutos de este intervalo, simplemente use 'span.TotalMinutes'.

Kane
fuente
2
Esta es una buena respuesta, pero da 0 en el intervalo Minutos cuando la diferencia entre dos tiempos es mayor a 1 hora (es decir, 60 minutos o más)
Asif Mehmood
6
@MalikAsif. Intenté esto con un lapso de 61 minutos y obtengo 1 hora y 1 minuto, como esperaba. Si el lapso fue exactamente de 60 minutos, entonces sí, los minutos serían cero. Estabas pensando TotalMinutes()?
Jim
17
NO ES VERDAD. span.Minutesdevuelve un número [0..59]. Úselo en su span.TotalMinuteslugar
Sten Petrov
2
Esta no debería ser la respuesta aceptada. Según los otros comentarios, no resuelve la pregunta correctamente.
tjmoore
2
@tjmoore gracias por los comentarios, estoy de acuerdo contigo. Respondí la pregunta original en enero de 2012, después de lo cual se editó la pregunta. Ocasionalmente obtengo votos negativos por esta respuesta, probablemente porque la mayoría de las personas están leyendo la respuesta 5 años después de que se hizo la pregunta original sin editar.
Kane
35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : el número total de minutos representados por esta instancia.

Tim Schmelter
fuente
2
Sí, TotalMinutes es lo que estaba buscando. Muchas gracias ^ _ ^
Wahid Bitar
int minutesRounded = (int) Math.Round (minutos);
Sagi
9

En su código de búsqueda está utilizando TimeSpan.FromMinutesincorrectamente. Consulte la documentación de MSDN para TimeSpan.FromMinutes, que proporciona la siguiente firma del método:

public static TimeSpan FromMinutes(double value)

por lo tanto, el siguiente código no se compilará

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

En su lugar, puede utilizar la propiedad TimeSpan.TotalMinutes para realizar esta aritmética. Por ejemplo:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;
Dr. Andrew Burnett-Thompson
fuente
3

Solo necesita consultar la TotalMinutespropiedad de esta maneravarTime.TotalMinutes

Alejandro R
fuente
1

Si la diferencia entre endTime y startTime es mayor o igual a 60 minutos , la declaración: endTime.Subtract(startTime).Minutes;siempre regresará (minutesDifference % 60). Obviamente lo cual no es deseable cuando solo hablamos de minutos (no de horas aquí).
Estas son algunas de las formas si desea obtener total number of minutes(en diferentes tipos):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
Asif Mehmood
fuente