Мне интересно, как я могу рассчитать, что такое неделя месяца на основе порядкового номера недели в году.Например, я имею в виду 33-ю неделю, я должен знать, что это 2-я неделя августа.Я уже рассчитал месяцы, но теперь я имею дело с неделями.
У меня уже есть решение, но оно мне кажется грязным ..
Вот код:
var data = query.GroupBy(x => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.CreatedDate ?? DateTime.UtcNow, CalendarWeekRule.FirstDay, DayOfWeek.Monday))
.Select(article => new ArticleSimpleObject
{
Week = GetWeekNumberOfMonth(article.FirstOrDefault().CreatedDate.Value),
Amount = article.Sum(x => x.Amount),
Month = article.FirstOrDefault().CreatedDate.Value.Month
});
А вот метод, который я использовал для получения номеров недели:
private static int GetWeekNumberOfMonth(DateTime date)
{
date = date.Date;
DateTime firstMonthDay = new DateTime(date.Year, date.Month, 1);
DateTime firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
if (firstMonthMonday > date)
{
firstMonthDay = firstMonthDay.AddMonths(-1);
firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7);
}
return (date - firstMonthMonday).Days / 7 + 1;
}
Когда я писал, ребята, это решение работает,
, но мне лично это не нравится, наверное, тамэто более элегантное решение, и поэтому я разместил этот вопрос, чтобы помочь себе и будущим читателям, если какой-то опытный человек поможет нам решить эту проблему:)
Может быть, это можно решить на основе класса Календаря https://docs.microsoft.com/en-us/dotnet/api/system.globalization.calendar?view=netframework-4.8
Я попробовал какой-то вариант, но я даже не был близок к его решению ..
Спасибо, ребята
Приветствия