Как увеличить объекты Date в C ++ - PullRequest
1 голос
/ 21 сентября 2010

У меня есть сотрудники, над которыми я работаю, и я застрял на последней функции.

использую функцию void Increment (int numDays = 1)

Эта функция должнапереместить дату вперед на количество календарных дней, указанных в аргументе.Значение по умолчанию для параметра - 1 день.Примеры:

Date d1(10, 31, 1998); // Oct 31, 1998
Date d2(6, 29, 1950); // June 29, 1950

d1.Increment(); // d1 is now Nov 1, 1998
d2.Increment(5); // d2 is now July 4, 1950

Я не понимаю, как это сделать.

void Date::Increment(int numDays = 1)

Я застрял, я знаю, как заставить функцию увеличиваться оператором ++, ноя запутываюсь, когда мне нужно получить функцию увеличения последнего дня месяца до первого или, например, окончания последнего дня этого месяца.С 31 октября по 1 ноября или с 29 июня по 4 июля. Я могу сделать это с 5 по 8 июля, но меняющиеся месяцы меня смущают

Ответы [ 4 ]

1 голос
/ 22 сентября 2010

На этом сайте вы найдете другие ответы, такие как:

Алгоритм сложения или вычитания дней из даты?

1 голос
/ 21 сентября 2010

Вам нужно будет сохранить список (или массив) количества дней в каждом месяце.Если вы добавите numDays к текущей дате, и она станет больше этой, вам также нужно увеличить месяц.

Например, у нас есть объект даты, представляющий 29 марта 2010 года. Мы вызываем Increment(4)и добавьте 4 к переменной дня, заканчивающейся 33 марта 2010 года. Теперь мы проверим, сколько дней у марта, и выясним, что это 31 (например, daysInMonth[3] == 31).Поскольку 33 больше 31, нам нужно вычесть 31 из 33 и увеличить месяц до 2 апреля 2010 года.

Вам потребуется специальная обработка для февраля в високосные годы (любой год делится на 4 и не делитсяна 100, если это также не делится на 400) и для увеличения после конца декабря.

0 голосов
/ 21 сентября 2010

Сначала создайте функцию, подобную

 int numDaysSinceBeginning( Date );

, которая подсчитывает количество дней, прошедших с общеизвестной даты (например, 1 января 1900 г.) до определенной даты.

Затем создайте другуюфункция, которая преобразует эту дельту дня в дату

Date createDateWithDelta( int );

Из вашего примера

Date d2(6, 29, 1950); // June 29, 1950

int d2Delta = numDaysSinceBeginnning( d2 );

Date d2Incremented = createDateWithDelta( d2Delta + 5 ); // d2Incremented is July 4, 1950
0 голосов
/ 21 сентября 2010

30 дней - сентябрь, апрель, июнь и ноябрь. Остальные имеют 31 день, за исключением февраля, который имеет 28 дней, кроме високосного года (каждые 4 года, и 2008 год был последним), когда у него 29 дней.

Этого должно быть достаточно, чтобы вы пошли.

...