web-dev-qa-db-fra.com

Affichage de la différence entre deux valeurs datetime en heures

Je récupère deux valeurs d'heure de la base de données. Une fois la valeur extraite, il me faut la différence entre les deux valeurs. Pour cela, je crée une variable timespan pour stocker la différence entre les 2 valeurs de date.

TimeSpan? variable = datevalue1 - datevalue2;

Maintenant, je dois montrer la différence qui est stockée dans la variable Timespan en termes de nombre d'heures. J'ai fait référence à TimeSpan.TotalHours mais je ne pouvais pas appliquer la même chose pour une raison quelconque. Comment je fais ça? J'utilise C # sur un projet MVC. J'ai simplement besoin de montrer la valeur de différence en heures?

EDIT: Étant donné que timespan était nullable, je ne pouvais pas utiliser la propriété total hours. Maintenant, je peux l'utiliser en faisant TimeSpanVal.Value.TotalHours ;

161
reggie

Je pense que vous êtes confus parce que vous n'avez pas déclaré TimeSpan vous avez déclaré un TimeSpan? qui est un nullableTimeSpan. Supprimez le point d'interrogation si vous n'avez pas besoin qu'il soit nullable ou utilisez variable.Value.TotalHours.

109
Hans Olsson

vous voudrez peut-être aussi regarder 

var hours = (datevalue1 - datevalue2).TotalHours;
161
MarkKGreenway

Dans l'exemple, nous créons deux objets datetime, l'un avec l'heure actuelle et l'autre avec 75 secondes ajoutées à l'heure actuelle. Ensuite, nous appellerons la méthode. Subtract () sur le deuxième objet DateTime. Cela renverra un objet TimeSpan . Une fois l'objet TimeSpan obtenu, nous pourrons utiliser les propriétés de TimeSpan pour obtenir les heures, les minutes et les secondes réelles.

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 );

Résultat:

Décalage horaire (secondes): 15 Décalage horaire (minutes): 1 Décalage horaire (heures): 0 Décalage horaire (jours): 0

71
safi

Y a-t-il une raison pour laquelle vous utilisez Nullable?

Si vous voulez utiliser Nullable, vous pouvez écrire variable.Value.TotalHours.

Ou vous pouvez simplement écrire: (datevalue1 - datevalue2).TotalHours.

38
Ilya Kogan

Voici un autre exemple de soustraction de deux dates en C # ...

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 
7
levteck

méthode plus précise pour les heures payées par les employés ou autre exigence de précision::

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

1
smurtagh

WOW, je dois dire: restez simple:

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

et:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

L'objet DateTime a toute la logique intégrée pour gérer le résultat booléen.

0
Rusty Nail
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)

peut également ajouter une différence entre les dates si on compare deux dates différentes 

new TimeSpan(24 * days, 0, 0)