Вопрос

Как я могу получить дату последнего воскресенья года в С#??Поможет ли класс 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 , чтобы узнать, где начинается первая неделя следующего года, и взять день до этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top