Je serais reconnaissant si quelqu'un pouvait m'aider à comprendre comment soustraire 2 champs datetime pour obtenir la différence en jours restants.
C'est très facile à faire avec C #. Pour comparer DateTimes, nous avons une classe appelée TimeSpan. La structure TimeSpan, dans ce cas, serait définie comme la différence entre vos deux dates/heures.
Disons que vos DateTimes s'appellent début et fin.
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
Nous avons établi nos DateTimes au 14 juin 2009 et au 14 décembre 2009.
Maintenant, trouvons la différence entre les deux. Pour ce faire, nous créons un TimeSpan:
TimeSpan difference = end - start;
Avec cet objet TimeSpan, vous pouvez exprimer la différence de temps de différentes manières. Cependant, vous avez spécifiquement demandé la différence en jours, alors voici comment vous pouvez l'obtenir:
Console.WriteLine("Difference in days: " + difference.Days);
Ainsi, la propriété s'appelle TimeSpan.Days.
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
Console.WriteLine("Difference in days: " + difference.Days); //Extract days, write to Console.
Pour plus d'informations sur l'utilisation de la structure TimeSpan, voir cette documentation MSDN (en particulier les exemples C #).
J'espère que j'ai aidé!
UPDATE: Certaines réponses suggèrent de faire la soustraction en une étape, comme avec:
int days = (dt2 - dt1).Days;
ou
int numDaysDiff = Math.Abs(date2.Subtract(date1).Days);
Cependant, ce sont la même chose que dans ma réponse, seulement abrégée. En effet, la méthode DateTime.Subtract () et l'opérateur de soustraction de DateTimes retournent un TimeSpan, à partir duquel vous pouvez ensuite accéder au nombre de jours. J'ai spécifiquement utilisé utilisé l'approche la plus longue dans mon exemple de code pour que vous compreniez clairement ce qui se passe entre vos objets DateTime et TimeSpan et comment tout cela fonctionne. Bien sûr, les autres approches que je viens de mentionner sont bien aussi.
UPDATE # 2:
Une question très similaire avait déjà été posée, et on peut la trouver ici . Cependant, l’essentiel de cette question était de savoir pourquoi l’échantillon de code (qui est essentiellement équivalent à celui de toutes les réponses) parfois fournit une réponse qui est un jour de congé. Je pense que cela est également important pour cette question.
Comme le suggère la réponse principale à l'autre question, vous pouvez utiliser ce code:
int days = (int)Math.Ceiling(difference.TotalDays);
Ce code utilise Math.Ceiling, qui, selon MSDN, est:
Retourne la plus petite valeur intégrale qui est supérieur ou égal à la double précision spécifiée nombre à virgule flottante.
Ainsi, nous avons maintenant un problème avec la façon dont vous voulez compter les jours. Voulez-vous compter une partie de la journée (telle que 0,5 par jour) comme:
Voici des exemples de code pour ce qui précède:
Compter comme une journée complète (en utilisant Math.Ceiling () pour arrondir):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
int days = (int)Math.Ceiling(difference.TotalDays); //Extract days, counting parts of a day as a full day (rounding up).
Console.WriteLine("Difference in days: " + days); //Write to Console.
Comptage dans le cadre d'une journée (N'utilisez PAS Math.Ceiling (), laissez-le plutôt sous forme décimale dans le cadre d'une journée):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
double days = difference.TotalDays; //Extract days, counting parts of a day as a part of a day (leaving in decimal form).
Console.WriteLine("Difference in days: " + days); //Write to Console.
Comptage comme rien du jour (arrondi au nombre de jours complets):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
int days = difference.TotalDays; //Extract days, counting parts of a day as nothing (rounding down).
Console.WriteLine("Difference in days: " + days); //Write to Console.
Utilisation
DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;
La solution la plus simple consiste à utiliser TimeSpan () . Cette fonction Soustraction vous retournera la différence entre deux dates en termes de durée. Vous pouvez maintenant récupérer des champs tels que des jours, des mois, etc. Pour accéder aux jours, vous pouvez utiliser Voici un exemple de code;
Code VB.Net;
Dim tsTimeSpan As TimeSpan
Dim ldDate1 as Date
Dim ldDate2 as Date
'Initialize date variables here
tsTimeSpan = ldDate1 .Subtract(ldDate2)
Dim NumberOfDays as integer = tsTimeSpan.days
Code C # .Net;
DateTime lDate1;
DateTime lDate2;
TimeSpan tsTimeSpan ;
int NumberOfDays;
//Initialize date variables here
tsTimeSpan = ldDate1 .Subtract(ldDate2);
NumberOfDays = tsTimeSpan.days;
DateTime dt1 = new DateTime(2009,01,01,00,00,00);
DateTime dt2 = new DateTime(2009,12,31,23,59,59);
int days = (dt2 - dt1).Days;
Différence en nombre de jours
Ces réponses prennent le nombre de jours sous la forme int
de la structure System.TimeSpan
qui résulte de la soustraction de deux champs System.DateTime
...
Réponse rapide - obtient le nombre de jours de différence.
int numDaysDiff = date2.Subtract(date1).Days;
Réponse alternative - utilise Math.Abs pour s'assurer qu'il ne s'agit pas d'un nombre négatif, juste au cas où les dates pourraient être fournies dans l'un ou l'autre ordre.
int numDaysDiff = Math.Abs( date2.Subtract(date1).Days );
Quelques exemples de données pour terminer le using System
namespace:
// sample data
DateTime date1 = DateTime.Now;
DateTime date2 = DateTime.Now.AddDays(10);
Références MSDN (et plusieurs exemples de code):
DateTime theDate = DateTime.Today;
int datediff = theDate.Subtract(expiryDate).Negate().Days;
if expiryDate > theDate then you get Negative value: -14
expiryDate is less than theDate then you get positive value: 14
Vous pouvez évidemment vouloir cela dans un scénario tel que
Vous avez besoin d'une différence qui pourrait être une valeur négative
Vous devriez regarder TimeSpan .
Pour obtenir les jours exacts en ignorant la section de temps
DateTime d1 = Convert.ToDateTime(DateTime.Now.ToShortDateString());
DateTime d2 = Convert.ToDateTime(DateTime.Now.AddDays(46).ToShortDateString());
var days = Convert.ToInt32(d2.Subtract(d1).TotalDays)