2011-02-09 15 views
131

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 de intervalo de tiempo para almacenar la diferencia de los 2 valores de fecha.Mostrando diferencia entre dos valores de fecha y hora en horas

TimeSpan? variable = datevalue1 - datevalue2; 

Ahora tengo que mostrar la diferencia que se almacena en la variable Timespan en términos de número de horas. Me he referido a TimeSpan.TotalHours pero no he podido aplicar el mismo por algún motivo. ¿Cómo hago eso? Estoy usando C# en un proyecto de MVC. Simplemente necesito mostrar el valor de la diferencia en horas?

EDITAR: Como el intervalo de tiempo fue anulable, no pude usar la propiedad de horas totales. Ahora puedo usarlo haciendo TimeSpanVal.Value.TotalHours;

+3

Why could y ¿No usas 'TimeSpan.TotalHours'? –

+0

no me lo permite. Lo intenté. :( – reggie

+0

¿es porque mi intervalo de tiempo es anulable que no puedo usar la propiedad totalhours? – reggie

Respuesta

96

Creo que está confundido porque no ha declarado TimeSpan que ha declarado TimeSpan? que es un nullableTimeSpan. Elimine el signo de interrogación si no necesita que se pueda aceptar una nulidad o use variable.Value.TotalHours.

57

En la muestra, estamos creando dos objetos de fecha y hora, uno con la hora actual y otro con 75 segundos agregados a la hora actual. Luego llamaremos al método .Subtract() 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, los minutos y los 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:

Time Difference (segundos): 15 Time Difference (minutos): 1 Time Difference (horas): 0 Time Difference (días): 0

+18

Desea utilizar "Total" como 'TotalSeconds',' TotalMinutes' etc. –

36

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

Si desea utilizar Nullable, puede escribir variable.Value.TotalHours.

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

+0

Probablemente porque datevalue1 o datevalue2 son 'DateTime?' –

+0

@Filip, está bien, deben ser 'DateTime'. En .NET, 'DateTime - DateTime = TimeSpan'. –

+1

@Illya, quiero decir que probablemente sean 'Nullable ' y, por lo tanto, obtienes un 'Nullable '. –

125

es posible que también desee ver en

var hours = (datevalue1 - datevalue2).TotalHours; 
+0

pero en este caso el sistema muestra "'System.Nullable ' no contiene una definición para 'TotalHours' y ningún método de extensión 'TotalHours' aceptando un primer argumento de tipo 'System.Nullable ' pudo ser encontrado ". ¿Puedes decirme por qué? – Neha

+5

Nullable necesitaría un .Value.TotalHours en lugar de solo .TotalHours. Es un factor del envoltorio anulable. Alternativamente, puede convertirlo en un intervalo de tiempo -> ((TimeSpan) (nullabledatevalue1 - nullabledatevalue2)). TotalHours – MarkKGreenway

5

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

if (DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24) 
{ 
... 
} 
0
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 añadir diferencia entre las fechas si comparar dos fechas diferentes

new TimeSpan(24 * days, 0, 0) 
Cuestiones relacionadas