Последнее воскресенье года в С#
-
07-07-2019 - |
Вопрос
Как я могу получить дату последнего воскресенья года в С#??Поможет ли класс gregoriancalendar?
Решение
Я не знаю, есть ли для этого способ, но простой способ — проверить последние 7 дней декабря, начиная с 31-го дня и обратного отсчета.
Обновлять: на самом деле, если дни недели пронумерованы так:
0 Sun, 1 Mon, ... 6 Sat
затем
lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode
Другие советы
Не самое лучшее решение, но оно должно работать:
int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
lastSunday = lastSunday.AddDays(-1);
}
Я думаю, что вы можете использовать целочисленное представление перечисления DayOfWeek
для этого:
DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
Как перечисление DayOfWeek начинается с 0 в воскресенье, это должно работать:
int Year = 2009;
DateTime endOfYear = new DateTime(Year, 12, 31);
DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
Вы можете узнать, какой день недели 31 декабря. Затем (если не воскресенье) рассчитать обратно ...
for (int y=2009; y<=2018; y++)
{
DateTime dt = new DateTime(y, 12, 31); // last day of year
dt = dt.AddDays(-(int)dt.DayOfweek); // sun == 0, so then no change
Console.WriteLine(dt.ToString("dddd dd-MM-yyyy"));
}
Извините, но у меня нет версии на C #, если вы видите здесь для версии VB. Я подозреваю, что вы сможете конвертировать его.
Это зависит ... Хотите ли вы последний день в году, который является воскресеньем, или воскресенье последней недели в году? В зависимости от того, как определяются недели в вашей стране, последняя неделя года может продолжаться до шести дней в следующем году.
Если вы хотите первое, вы можете просто начать 31 декабря и вернуться, пока не найдете воскресенье.
Если вам нужен второй, вам придется использовать метод System.Globalizartion.Calendar.GetWeekOfYear
, чтобы узнать, где начинается первая неделя следующего года, и взять день до этого. р>