CdmsDate: Класс для работы с
датами
Автор: Селин Дмитрий
Класс позволяет получать разность между двумя
датами, складывать даты, а так же производить
другие арифметические действия и преобразования
с датами, проверять год на високосность и т.д.
Компилятор: Visual C++
Функциональность
С обьектами класса, представляющими дату можно
проводить такие операции:
- создавать из строк вида "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) все что вы мне напишите :) (если
конечно не
очень много.
Downloads
Скачать исходник - 8 Kb
|