2010-02-24 9 views
29

J'ai essayé plusieurs façons de calculer le nombre de jours entre deux dates, je veux dire, en comptant les jours entiers. Un exemple de ce que je dois:Différence de jours entre deux dates

START DATE   END DATE   Day Count 

24/02/2010 16:26  24/02/2010 16:26   1 
20/02/2010 18:16  24/02/2010 16:26   5 
31/12/2009 20:00  24/02/2010 16:26   56 
15/07/2009 20:59  24/02/2010 16:26   225 
+3

Vous avez encore accepter une réponse. Vous n'avez pas posté ce que vous avez essayé. Avons-nous une troisième grève? –

Répondre

51

Les DateTime peuvent être soustraits pour obtenir un TimeSpan. Le TimeSpan a un TotalDays qui est le nombre de jours (y compris les jours fractionnaires).

int DaysBetween(DateTime d1, DateTime d2) { 
    TimeSpan span = d2.Subtract(d1); 
    return (int)span.TotalDays; 
} 

NOTE des intervalles de temps sont signés. Si d1 = 1/9/11 et d2 = 1/11/11, alors d1.substract (d2) = durée de 2 jours. Donc, si vous voulez utiliser un laps de temps pour savoir si les dates sont dans les X jours de l'autre, vous devez prendre la valeur absolue du nombre total de jours ...

Math.Abs(span.TotalDays) 
+0

ma solution dans VB.NET: ts Dim As TimeSpan ts = s.Subtract (DateTime.Parse (h)) jours Dim As Integer jours = ts.TotalDays + 1 –

15

Vous pouvez utiliser la subtraction operator sur les deux instances de DateTime (ou DateTimeOffset, car il a la même subtraction operator, et il est le recommended structure to use for date values in .NET) pour obtenir une instance TimeSpan.

Une fois que vous avez cela, vous pouvez appeler le Days property pour obtenir le nombre de jours que le TimeSpan représente. Si vous voulez le nombre de jours entiers et fractionnaires, regardez TotalDays property.

Dans votre cas, il semble que vous voulez ajouter 1 à quelle que soit la valeur des rendements de propriété Days, comme calcul personnalisé indique que pour deux DateTime instances qui représentent la même valeur, le résultat est 1.

9
DateTime dtOne; 
DateTime dtTwo; 

// to get the total days in between 
int answer = (dtTwo - dtOne).TotalDays 
+6

'TimeSpan.TotalDays' renvoie une double , donc vous aurez besoin d'une conversion en 'int'. – ChrisF

+1

En fait, vous pouvez simplement utiliser TimeSpan.Days si vous voulez int comme type de retour – makoshichi

Questions connexes