Класс позволяет получать разность между двумя датами, складывать даты, а так же
производить другие арифметические действия и преобразования с датами, проверять
год на високосность и т.д.
Функциональность
С обьектами класса, представляющими дату можно проводить такие операции:
- создавать из строк вида "1,1,2000" или "02.03.1999". Внимание, "2.2.99"
соответствует 0099 году.
даты только после Рождества Христова.:)
или указывать при создании. CdmsDate a1(1.1.2001);
- После создания обьекта дату можно изменить
задавая каждый элемент даты. a1.SetDay(1); a1.SetMonth(1); a1.SetYear(2000)
задавая всю дату a1.SetDate(2,2,1998);
задавая дату строкой a1.SetDateStr("1.1.2001");
оператором присваивания a1="1.1.2001" или a1=b1, где b1 - тоже некая дата или
строка.
- Получать доступ
к элементам day=a1.GetDay(); month=a1.GetMonth(); year=a1.GetYear;
к строковому представлению char datestr[11]; strcpy(datestr,a1.tstr())
- сравнивать. bool b=(CdmsDate)"2.2.2000">"1.2.2000"; if(a1==b1) где b1 -
строка или другая дата.
- складывать
1) две даты. CdmsDate b1(2.2.2); a1+=b1 или CdmsDate a2=a1+b1. Так мы узнаем
какая дата
будет через два года, два дня и два месяца после даты a1
2) Дату и число. CdmsDate a2=a1+n или a1+=n где int n=19 некое число. Так мы
узнаем какая
дата будет через n дней после даты a1
- вычитать
1) из даты дату. _Только_ оператором -=. a1-=b1, где CdmsDate b1(3.3.0) или
char b1="3.3.0"
(при b1- строке автоматом преобразует b1 в дату). Тогда в a1 будет дата,
которая была 3
месяца и три дня назад. (для данного примера)
2) из даты дату и получиь число. _ТОЛЬКО_ оператором -. int n=a1-b1. где a1 -
дата, b1 - дата
или строка. (две строки нельзя, т.к. комп не догадаеться, к чему конвертить
строки). Таким
образом _МЫ_ _ПОЛУЧИМ_ _КОЛИЧЕСТВО_ _ДНЕЙ_ _РАЗДЕЛЯЮЩИХ_ _ЭТИ_ _ДВЕ_
_ДАТЫ_ например между 3.3.2000 и 28.2.2000 будет 4 дня. Если из меньшей
вычитать
большую получим отрицательное число. Например a1(3.3.2001)-"3.4.2001"=-31
3) вычитать из даты число. a1-=n или CdmsDate a2=a1-n; так мы узнаем, какая
дата была n дней
назад.
ЗАМЕЧАНИЕ:
1) При всех операциях "сегодняшнее" число , не учитывается. например через 2
дня от 1.1.2001
будет 3.1.2001 а не 2.1.2001 а за два дня до 4.1.2001 было 2.1.2001 а не
3.1.2001.
2) Проверка года на високосность есть.
Планируемые дополнения:
1) добавить оператор вывода в поток. cin<<"a1="<<a1<<"\r\n";
//где a1 - обьект класса CdmsDate
2) добавить оператор преобразования к char* вместо функции .tstr().
char[11]strdate;
strcpy(strdate,a1);//где a1- обьект CdmsDate
3) добывить дни недели и возможность с нимим работать, узнавать какой день
недели был 1.1
2001 основываясь на дне недели 2.2.2002. 4) все что вы мне напишите :) (если
конечно не
очень много. |