Я соглашаюсь с NilObject, но я хотел бы добавить к этому:
, если Вы копируете весь метод и только изменить маленькую часть кода, можно рассмотреть занятие им с инверсией управления
, Если Вы копируете и вставить код вокруг, Вы почти всегда делаете что-то неправильно. Шифруемый как принцип разработки Однажды и Только Однажды .
// birthday is a DateTime containing the birthday
DateTime today = DateTime.Today;
DateTime next = new DateTime(today.Year,birthday.Month,birthday.Day);
if (next < today)
next = next.AddYears(1);
int numDays = (next - today).Days;
Этот тривиальный алгоритм не работает, если день рождения 29 февраля. Это альтернатива (которая по сути совпадает с ответом Себа Нильссона:
DateTime today = DateTime.Today;
DateTime next = birthday.AddYears(today.Year - birthday.Year);
if (next < today)
next = next.AddYears(1);
int numDays = (next - today).Days;
Попробуйте этот метод
private int GetDaysBeforeBirthday(DateTime birthdate)
{
DateTime nextBday = new DateTime(DateTime.Now.Year, birthdate.Month, birthdate.Day);
if (DateTime.Today > nextBday)
nextBday = nextBday.AddYears(1);
return (nextBday - DateTime.Today).Days;
}
просто передайте дату рождения, и он вернет оставшиеся дни до вашего следующего дня рождения