2010-02-24 41 views
29

He estado intentando calcular el número de días entre dos fechas, es decir, contando los días completos. Un ejemplo de lo que necesito:Diferencia de días entre dos fechas

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

sin embargo, usted tiene que aceptar una respuesta. No has publicado lo que has intentado. ¿Tenemos un tercer ataque? –

Respuesta

51

DateTime se puede restar para obtener un TimeSpan. TimeSpan tiene TotalDays, que es la cantidad de días (también incluye días fraccionarios).

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

NOTA lapsos de tiempo se firman. Si d1 = 1/9/11 y d2 = 1/11/11, entonces d1.subtract (d2) = intervalo de tiempo de -2 días. Así que si desea utilizar un lapso de tiempo para averiguar si las fechas se encuentran dentro de X días de diferencia, usted necesita tomar el valor absoluto del total de días ...

Math.Abs(span.TotalDays) 
+0

mi solución en VB.NET: ts déviles como TimeSpan ts = s.Subtract (DateTime.Parse (h)) día Dim As Integer día = ts.TotalDays + 1 –

15

Usted puede utilizar el subtraction operator en las dos instancias de DateTime (o DateTimeOffset, ya que tiene la misma subtraction operator, y es el recommended structure to use for date values in .NET) para obtener una instancia de TimeSpan.

Una vez que tenga eso, puede llamar al Days property para obtener el número de días completos que representa el TimeSpan.

Si desea el número de días completos y fraccionarios, mire el TotalDays property.

En su caso específico, parece que quiere añadir 1 a cualquier valor de los retornos Days de propiedad, ya que su cálculo personalizado indica que para dos DateTime casos que representan el mismo valor, el resultado es 1.

9
DateTime dtOne; 
DateTime dtTwo; 

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

'TimeSpan.TotalDays' devuelve un doble , entonces necesitarás una conversión a 'int' allí. – ChrisF

+1

En realidad, podría usar TimeSpan.Days si desea int como tipo de retorno – makoshichi

Cuestiones relacionadas