Как увеличить объекты Date в C++

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

используйте функцию 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 июля, но меня смущает смена месяцев.


person Gina Cyrille    schedule 21.09.2010    source источник
comment
это для домашнего задания? в противном случае вам лучше использовать библиотеку времени повышения даты   -  person Anycorn    schedule 21.09.2010
comment
Вам удалось сделать void Date::Decrement(int numDays = 1) ? Даже если этого нет в задании, это может дать информацию, необходимую для Increment.   -  person MSalters    schedule 21.09.2010


Ответы (3)


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

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

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

person Zooba    schedule 21.09.2010

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

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

person San Jacinto    schedule 21.09.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
person Arun    schedule 21.09.2010