Последнее воскресенье года в c # - PullRequest
2 голосов
/ 14 сентября 2009

Как я могу получить дату последнего воскресенья года в C # ?? Поможет ли класс gregoriancalendar?

Ответы [ 7 ]

8 голосов
/ 14 сентября 2009

Я не знаю, есть ли способ для этого, но простой способ - проверить последние 7 дней декабря, начиная с 31-го дня и заканчивая обратным отсчетом.

Обновление: на самом деле, если дни недели нумеруются следующим образом:

0 Sun, 1 Mon, ... 6 Sat

тогда

lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode
7 голосов
/ 14 сентября 2009

Не самое лучшее решение, но оно должно работать:

int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
    lastSunday = lastSunday.AddDays(-1);
}
5 голосов
/ 14 сентября 2009

Я думаю, что вы можете использовать целочисленное представление перечисления DayOfWeek для этого:

DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
3 голосов
/ 14 сентября 2009

Поскольку перечисление DayOfWeek начинается с 0 для воскресенья, это должно работать:

    int Year = 2009;
    DateTime endOfYear = new DateTime(Year, 12, 31);
    DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek); 
1 голос
/ 14 сентября 2009

Вы можете узнать, какой день недели 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"));
}
0 голосов
/ 14 сентября 2009

Это зависит ... Вы хотите последний день года, который является воскресеньем, или воскресенье последней недели года? В зависимости от того, как определяются недели в вашей стране, последняя неделя года может продолжаться до шести дней в следующем году.

Если вы хотите первое, вы можете просто начать 31 декабря и вернуться, пока не найдете воскресенье.

Если вам нужен второй, вам придется использовать метод System.Globalizartion.Calendar.GetWeekOfYear, чтобы узнать, где начинается первая неделя следующего года, и взять день до этого.

0 голосов
/ 14 сентября 2009

Извините, но у меня нет версии на C #, если вы видите здесь для версии VB. Я подозреваю, что вы сможете конвертировать его.

...