15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


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