Mostrando la diferencia entre dos valores datetime en horas


Estoy recuperando dos valores de fecha y hora de la base de datos. Una vez que se recupera el valor, necesito la diferencia entre los dos valores. Para eso, creo una variable timespan para almacenar la diferencia de los 2 valores de fecha.

TimeSpan? variable = datevalue1 - datevalue2;

Ahora necesito mostrar la diferencia que se almacena en la variable Timespan en términos de número de horas. Me referí a TimeSpan.TotalHours pero no podía aplicar lo mismo por alguna razón. ¿Cómo hago eso? Estoy usando C # en un proyecto MVC. Yo simple ¿necesita mostrar el valor de la diferencia en horas?

EDITAR: Dado que timespan era nullable, no podía usar la propiedad total hours. Ahora puedo usarlo haciendo TimeSpanVal.Valor.TotalHours ;

Author: Marc, 2011-02-09

7 answers

Creo que estás confundido porque no has declarado un {[0] }has declarado un TimeSpan? que es un nullable TimeSpan. Elimine el signo de interrogación si no necesita que sea nullable o use variable.Value.TotalHours.

 106
Author: Hans Olsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-09 14:44:25

Es posible que también desee mirar

var hours = (datevalue1 - datevalue2).TotalHours;
 149
Author: MarkKGreenway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-09 14:44:57

En la muestra, estamos creando dos objetos datetime, uno con la hora actual y otro con 75 segundos añadidos a la hora actual. Luego llamaremos al método .Restar () en el segundo objeto DateTime. Esto devolverá un objeto TimeSpan. Una vez que obtenemos el objeto TimeSpan, podemos usar las propiedades de TimeSpan para obtener las Horas, Minutos y Segundos reales.

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

Resultado:

Diferencia de tiempo (segundos): 15 Diferencia horaria (minutos): 1 Diferencia horaria (horas): 0 Diferencia horaria (días): 0

 63
Author: safi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-27 09:38:29

¿Hay alguna razón por la que estés usando Nullable?

Si quieres usar Nullable entonces puedes escribir variable.Value.TotalHours.

O simplemente puedes escribir: (datevalue1 - datevalue2).TotalHours.

 38
Author: Ilya Kogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-09 14:43:50

Aquí hay otro ejemplo de restar dos fechas en C# ...

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 
 6
Author: levteck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-09 07:03:29
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)

También Puede agregar diferencia entre las fechas si comparamos dos fechas diferentes

new TimeSpan(24 * days, 0, 0)
 0
Author: Balachandar Palanisamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-09 14:37:41

Una forma más precisa para las horas pagadas por el empleado u otro requisito de precisión::

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

Https://dotnetfiddle.net/tVIoVJ

 0
Author: smurtagh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-26 12:36:36