Sono nel mezzo del calcolo dei numeri delle settimane per le date, ma il System.Globalization.Calendar
restituisce risultati strani per (tra gli altri) 31 dicembre 2007 e 2012.System.Globalization.Calendar.GetWeekOfYear() restituisce risultati dispari
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);
}
Risultati
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
per quanto ho capito, non ci dovrebbe essere una settimana 53 nel 2007 e nel 2012, ma i giorni dovrebbero essere inclusi nella settimana 1. esiste un modo per modificare questo comportamento nel Calendar
?
"I giorni dovrebbero essere inclusi nella settimana 1": secondo quale regola? Secondo le regole che conosco, gli ultimi giorni dell'anno non fanno mai parte della prima settimana del prossimo anno ... –
Secondo ISO 8601. http://en.wikipedia.org/wiki/ISO_8601 – sshow
BTW, perché stai usando quel formato di data strano? Penso di non aver mai visto le date scritte come "2007.12.29". – svick