разница дат



разница между двумя датами

Автор Ёаша Denfer задал вопрос в разделе Другие языки и технологии

как получить разницу между двумя датами в днях 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 << "
Введите начальное число: "; cin >> begDay;
cout << " Введите начальный месяц: "; cin >> begMonth;
cout << " Введите начальный год: "; cin >> begYear;
tm dateBeg = {0, 0, 0, begDay, begMonth - 1, begYear - 1900, 0, 0, 0};
cout << "
Введите конечное число: "; 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 << "
Разница в днях равна: " << 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 << "
Введите начальное число: "; 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 << "
Введите конечное число: "; 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 << "
Разница в днях равна: " << daysDifference;
cin.get(); cin.get();
return 0;
}

Ответ от Псевдоним[гуру]
в версии от borland есть функции работы со временем Tdatetime если не ошибаюсь, а вот в версии от microsoft тоже сталкивался с такой проблемой, сам писал функцию, только мне требовалось сравнить две даты, ну думаю получить разницу тоже не составит труда. алгоритм примерно следующий: можно завести структуру работать с ней на порядок проще. но можно обойтись и переменными только их будет много. объявляем 6 переменных (3 переменные для одной даты и 3 для другой) для даты, и 3для подсчета разницы ну и считаем
разница1=(число1 - число2);
разница2=(месяц1-месяц2);
разница3=(год1-год2);
ну и выводим ("разница состовляет"+разница1+"дней"...и т. д. )
ну это так скажем деревянным способом, можно еще написать функции для вывода коректных окончаний например 3дня, 30дней и т. д. .так же учитывать высокосный год, округлять до дней и т. д. Это в принципе просто, я за чисто символические 100WMR сделаю все подробно. пиши в агент если что

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: как получить разницу между двумя датами в днях C++. напишите пример
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*