Как определить, произошел ли день рождения или годовщина в течение диапазона дат - PullRequest
25 голосов
/ 31 марта 2010

Учитывая, что у меня день / день рождения DateTime, как я могу определить, произошла ли эта дата в течение определенного диапазона дат? Например,

День Рождения = 1/2/2000
Диапазон дат = 25.12.2008 - 1/3/2009

Мне нужен метод, чтобы определить, произошел ли день рождения этого человека во время этого диапазона дат - предпочтительно в C #.

Сначала я изменил год даты и времени дня рождения в соответствии с диапазоном дат, а затем просто проверил, находится ли «новый» день и дата конца дня между начальной и конечной датой диапазона дат ... но когда диапазон дат охватывает разные годы, как в моем примере выше - мне пришлось добавить противное утверждение if. Нет лучшего способа?

Ответы [ 13 ]

0 голосов
/ 31 марта 2010

Установите день рождения на 2000 = год, от даты на год = 2000 и на дату до 2000 года. Если дата на до на дату, установите дату на 2001 год .

После этого махинации сверху:

if (Birthday > DateRangeLower && Birthday < DateRangeUpper) {
    // it's your birthday!
}
0 голосов
/ 31 марта 2010

Возможно, вам лучше всего нарисовать картинку для этого.

Проблема в основном определяет, существует ли такой N, что N-й день рождения человека лежит в диапазоне или нет.

Вы можете взять базовую линию и рассчитать число дней по модулю, который будет обрабатывать смену года (но високосные годы могут привести к ошибкам типа «один на один»).

Другая альтернатива, которая может сделать более простое представление, состоит в том, что, поскольку дни рождения образуют 1-D сетку в строке календаря, чтобы день рождения НЕ попадал в диапазон, диапазон должен полностью лежать между днями рождения человека в последующие годы : т.е. НЕТ (BirthdayY1

Обычно, когда мы проводили такой анализ, это были целые месяцы, поэтому было гораздо проще найти все дни рождения в мае, например, чтобы получить поздравительные открытки.

0 голосов
/ 31 марта 2010
if (Birthday.Month >= DateRangeLower.Month && Birthday.Month <= DateRangeUpper.Month
      && Birthday.Day>= DateRangeLower.Day && Birthday.Day<= DateRangeUpper.Day) {
 //Partytime...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...