Другие языки программирования и технологии

как получить разницу между двумя датами в днях C++. напишите пример

// _69828855
#include <iostream>
#include <ctime>
#define DAY 86400
using namespace std;

int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");

int begDay, begMonth, begYear;
int endDay, endMonth, endYear;
time_t time1, time2, daysDifference;

cout << "\n Введите начальное число: "; cin >> begDay;
cout << " Введите начальный месяц: "; cin >> begMonth;
cout << " Введите начальный год: "; cin >> begYear;

tm dateBeg = {0, 0, 0, begDay, begMonth - 1, begYear - 1900, 0, 0, 0};

cout << "\n Введите конечное число: "; cin >> endDay;
cout << " Введите конечный месяц: "; cin >> endMonth;
cout << " Введите конечный год: "; cin >> endYear;

tm dateEnd = {0, 0, 0, endDay, endMonth - 1, endYear - 1900, 0, 0, 0};

time1 = mktime(&dateBeg);
time2 = mktime(&dateEnd);
daysDifference = ((time1 > time2) ? time1 - time2 : time2 - time1) / DAY;

cout << "\n Разница в днях равна: " << daysDifference;
cin.get(); cin.get();
return 0;
}

Либо в развёрнутом варианте... .

// _69828855
#include <iostream>
#include <ctime>
#define DAY 86400
using namespace std;

int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");

int begDay, begMonth, begYear;
int endDay, endMonth, endYear;
struct tm dateBeg, dateEnd;
time_t time1, time2, daysDifference;

cout << "\n Введите начальное число: "; cin >> begDay;
cout << " Введите начальный месяц: "; cin >> begMonth;
cout << " Введите начальный год: "; cin >> begYear;

dateBeg.tm_sec = 0;
dateBeg.tm_min = 0;
dateBeg.tm_hour = 0;
dateBeg.tm_mday = begDay;
dateBeg.tm_mon = begMonth - 1;
dateBeg.tm_year = begYear - 1900;
dateBeg.tm_wday = 0;
dateBeg.tm_yday = 0;
dateBeg.tm_isdst = 0;

cout << "\n Введите конечное число: "; cin >> endDay;
cout << " Введите конечный месяц: "; cin >> endMonth;
cout << " Введите конечный год: "; cin >> endYear;

dateEnd.tm_sec = 0;
dateEnd.tm_min = 0;
dateEnd.tm_hour = 0;
dateEnd.tm_mday = endDay;
dateEnd.tm_mon = endMonth - 1;
dateEnd.tm_year = endYear - 1900;
dateEnd.tm_wday = 0;
dateEnd.tm_yday = 0;
dateEnd.tm_isdst = 0;

time1 = mktime(&dateBeg);
time2 = mktime(&dateEnd);
daysDifference = ((time1 > time2) ? time1 - time2 : time2 - time1) / DAY;

cout << "\n Разница в днях равна: " << daysDifference;
cin.get(); cin.get();
return 0;
}
Сергей Козубов
Сергей Козубов
57 663
Лучший ответ
в версии от borland есть функции работы со временем Tdatetime если не ошибаюсь, а вот в версии от microsoft тоже сталкивался с такой проблемой, сам писал функцию, только мне требовалось сравнить две даты, ну думаю получить разницу тоже не составит труда. алгоритм примерно следующий: можно завести структуру работать с ней на порядок проще. но можно обойтись и переменными только их будет много. объявляем 6 переменных (3 переменные для одной даты и 3 для другой) для даты, и 3для подсчета разницы ну и считаем
разница1=(число1 - число2);
разница2=(месяц1-месяц2);
разница3=(год1-год2);
ну и выводим ("разница состовляет"+разница1+"дней"...и т. д. )
ну это так скажем деревянным способом, можно еще написать функции для вывода коректных окончаний например 3дня, 30дней и т. д. .так же учитывать высокосный год, округлять до дней и т. д. Это в принципе просто, я за чисто символические 100WMR сделаю все подробно. пиши в агент если что