Нужно получить номер недели. С первой неделей года всё понятно. А если первая неделя будет текущая (26.03 - 01.04) с учётом високосного года. Т.е. предыдущая неделя (19.03 - 25.03) была 52?
Считать недели можно по-разному. Можно считать первой неделю, в которой первое января. Можно считать первой неделю, в которой первый понедельник года. Можно считать первой неделю, бóльшая часть которой принадлежит новому году. Как именно считать — выбирать вам. В .NET за этот выбор отвечает энумерация System.Globalization.CalendarWeekRule
.
Получить номер недели по дате можно так:
var dt = new DateTime(2017, 1, 1);
var cal = new GregorianCalendar();
var weekNumber = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
// получается 52
Мы видим, что по правилу «год начинается с полной недели» 1 января 2017 года принадлежит 52-ой неделе прошлого, 2016 года.
Не знаю, правильно ли понял, что вы хотите сделать, но допустим:
У вас есть объект DateTime
. Не знаю, как вы его получите, будь то DateTime.Now
, DateTime.UtcNow
, или как-то еще. Задача в определении того, какая по счету неделя идет для этой даты.
Тогда задача становится тривиальной:
DateTime myDateTime = DateTime.Now;
int firstDayOfYear = (int)new DateTime(myDateTime.Year, 1, 1).DayOfWeek;
int weekNumber = (myDateTime.DayOfYear + firstDayOfYear) / 7;
Тогда переменная weekNumber
будет хранить значение, и при этом первая неделя будет 0
, вторая - 1
и т.д. Если нужно считать недели, начиная с 1
, то просто
int weekNumber = (myDateTime.DayOfYear + firstDayOfYear) / 7 + 1;
Как-то так.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем, хочу что бы перед добавление записи в коллекцию у меня выполнялось некоторое действие
Как реализовать обмен данными между основным циклом и потоками? Допустим есть такой псевдокод Пример: