Résultat exact c # de sql datediff

J'essaie d'get le nombre de jours (calculé byu datediff) en sql et le nombre de jours en c # (calculé par DateTime.now.Substract) pour être le même, mais ils returnnent des résultats différents ….

//returns 0 int reso = DateTime.Now.Subtract(expirationDate).Days; 

contre

//returns 1 dateDiff(dd,getDate(),ExpirationDate)
//returns 1 dateDiff(dd,getDate(),ExpirationDate) 

Dans les deux cas, ExpirationDate est '10 / 1/2011 00:00:00 ', et le code et la database sont assis sur le même server. Je veux que le return int soit le même. Je soupçonne qu'il me manque quelque chose de stupide … des idées ??

01/10/2011 est inférieur à 1 jour de DateTime.Now. Puisque vous récupérez un TimeSpan et que vous y appliquez des jours, vous récupérez un TimeSpan <1 jour. Donc, ça va revenir 0 jours.

Au lieu de cela, utilisez simplement le composant Date de ces DateTimes et il indiquera correctement le nombre de jours d'intervalle – comme ceci:

 DateTime now = DateTime.Now; DateTime tomorrow = new DateTime(2011, 10, 1); var val = (tomorrow.Date - now.Date).Days; 

Cela vous rapportera 1 jour.

dateDiff(dd,getDate(),ExpirationDate) effectue une comparaison de jours. DateTime.Now.Subtract(expirationDate).Days effectue une date et heure

Par exemple

SELECT dateDiff(dd,'10/1/2011 23:59:00' , '10/2/2011') renvoie un jour même à une minute d'intervalle.

Si vous voulez la même chose en C #, vous devez supprimer le composant de time

par exemple

 DateTime dt1 = new DateTime(2011,10,1, 23,59,0); DateTime dt2 = new DateTime(2011,10,2, 0,0,0); Console.WriteLine((int) dt2.Subtract(dt1.Subtract(dt1.TimeOfDay))); 

Donc, dans votre cas, ce serait quelque chose comme

 DateTime CurrentDate = DateTime.Now; int reso = CurrentDate.Subtract(CurrentDate.TimeOfDay).Subtract(DateTime.expirationDate).Days; 

Je ne l'ai pas testé mais je ne le ferais pas DateTime.Now.Subtract(DateTime.Now.Subtract.TimeOfDay)

Parce que le deuxième appel à Maintenant ne garantirait pas d'être le même que le premier appel à maintenant

En tout cas, la réponse de Stealth Rabbi semble plus élégante de toute façon puisque vous cherchez un TimeSpan pas un DateTime

Je suppose que vous voulez le nombre de jours totaux , pas le nombre de jours de la plus grande unité précédente. Vous voudriez utiliser la propriété TotalDays. En outre, vous pouvez find plus facile d'utiliser l'opérateur less pour faire une soustraction

 DateTime d1 = DateTime.Now; DateTime d2 = new DateTime(2009, 1, 2); TimeSpan difference = d1 - d2; Console.WriteLine(difference.TotalDays); // Outputs (today):1001.46817997424