Estoy en el medio del cálculo de los números de semana para las fechas, pero el System.Globalization.Calendar
está devolviendo resultados impares para (entre otros años) el 31 de diciembre del año 2007 y 2012.System.Globalization.Calendar.GetWeekOfYear() devuelve resultados impares
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
var date = new DateTime(2007, 12, 29);
for (int i = 0; i < 5; i++)
{
int w = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
Console.WriteLine("{0}\t{1}", date.ToString("dd.MM.yyyy"), w);
date = date.AddDays(1);
}
Resultados
29.12.2007 52
30.12.2007 52
31.12.2007 53 <--
01.01.2008 1
02.01.2008 1
29.12.2012 52
30.12.2012 52
31.12.2012 53 <--
01.01.2013 1
02.01.2013 1
por lo que yo entiendo, no debería ser una semana 53 en el año 2007 y 2012, pero los días deberían incluirse en la semana 1. ¿hay una manera para cambiar este comportamiento en el Calendar
?
"Se supone que los días deben estar incluidos en la semana 1": según qué regla? De acuerdo con las reglas que conozco, los últimos días del año nunca forman parte de la primera semana del próximo año ... –
Según ISO 8601. http://en.wikipedia.org/wiki/ISO_8601 – sshow
Por cierto, ¿por qué? ¿Estás usando ese extraño formato de fecha? Creo que nunca he visto fechas escritas como '2007.12.29'. – svick