Согласно ГОСТ ИСО 8601-2001 “ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ” расчет номера недели в Российской Федерации осуществляется так:
Первой неделей года является та неделя, которая содержит число 4 января. То есть если первое января выпадает на пятницу, субботу, или воскресенье, то все еще продолжается последняя неделя предыдущего года.
Это может приводить к интересным спецэффектам - в году может содержаться 52 или 53 недели, 29, 30, 31 декабря могут относиться к первой неделе следующего года, и наоборот, 1, 2, и 3 января могут относиться к 52 или 53 неделе прошлого года. В частности 53 недели содержали 2015 и 2020 годы.
Привычный подход к вычислению количества недель в году с помощью Calendar.GetWeekOfYear для нашего ГОСТа даёт сбой и работает некорректно. 53-и недели при таком подходе отсустсвуют.
1 | // Такой подход вычисляет 53-ю неделю НЕКОРРЕКТНО |
Метод Calendar.GetWeekOfYear вычиляет недели в году не по ГОСТ ИСО 8601-2001 и для календаря РФ не подходит!
Для расчёта недель согласно ГОСТ ИСО 8601-2001 следует использовать статический класс ISOWeek и метод GetWeekOfYear:
1 | for (var i = 1; i < dateTimeRanges.Count; i++) |
Подробнее с ISOWeek.GetWeekOfYear можно познакомиться по ссылке