2011-05-05 10 views
20

Exactamente como se dice en la lata, sólo necesito la forma más eficiente de contar semanas (es decir, tramos de 7 días, no semanas calendario) entre dos fechas en C#.forma más eficiente para contar el número de semanas entre dos datetimes

+0

¿Quieres decir semanas como en Calender? – V4Vendetta

+0

¿Qué otro tipo de semanas hay? ¿Y cuántos de ellos tienen algo que ver con C# o datetimes? – McAzzaMan

+2

Lo que quiero decir es dos enfoques por los cuales cualquier período de 7 días podría ser una semana y el otro cuando sigue el calendario que tiene semanas en intervalos de fechas específicos. Dado que se trata de fechas, es más relevante verificarlas con las semanas del calendario. – V4Vendetta

Respuesta

38

Obtener el número de días y dividir por 7.

int weeks = (date1 - date2).TotalDays/7; 

Usted también puede tener un resto de hasta 6 días que no se incluirán en el número de semanas.

+1

Gracias. No creería cuántas respuestas basura hay para este en línea, y estoy teniendo un poco de un día de cerebro duro y no podría encontrar nada. – McAzzaMan

+1

Esta respuesta no funciona cuando desea conocer el otro "tipo" de medición de semanas, por lo que se desea semanas de calendario, no cualquier intervalo arbitrario. Entonces, por ejemplo, diga que tiene un criterio de frecuencia según el cual se debe hacer algo "una vez por semana". Si se hizo un sábado, entonces el domingo desea ver el resultado de "1" porque ahora es una nueva semana calendario. Para obtener un cero, tendría que comparar dos fechas en la misma semana. Esta respuesta dará "0" y continuará dando cero hasta el próximo sábado. Ver la observación 'V4Vendetta' en los comentarios OP. – DAG

+1

@DAG - ¿Has leído la pregunta? Eso no es lo que pidió. – Oded

5

Asumo que desea conseguir esto sobre la base de la calandria. Para ello, tiene System.Globalization

DateTime date1 = DateTime.Now; 
DateTimeFormatInfo dinfo = DateTimeFormatInfo.CurrentInfo; 
dinfo.Calendar.GetWeekOfYear(date1, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday) 

en base a su necesidad que tiene que configurar la regla de la semana del calendario y el primer día de la semana.

Esto le da un número de semana para el calendario. usted puede conseguir lo mismo con su otra fecha, la diferencia es sus semanas cuentan

la esperanza que esto le ayuda.

+0

Esto falla en el caso muy común de dos fechas que abarcan diferentes años. No todos los años son 52 semanas, por lo que su respuesta no tiene una solución inmediata. – DAG

3

Pruebe lo siguiente para obtener el número de días:

TimeSpan ts = date1.Subtract(date2); 
int dateDiff = ts.Days(); 

Entonces, como @Oded dicho, se divide por 7

int totalWeeks = (int) dateDiff/7; 

Salud!

Cuestiones relacionadas