Форум программистов, компьютерный форум CyberForum.ru

Определить число часов, прошедших между двумя датами - C++

Восстановить пароль Регистрация
 
Azart11
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 54
20.09.2012, 07:24     Определить число часов, прошедших между двумя датами #1
Разработать программу, определяющую число часов, прошедших между двумя датами, введенными пользователем.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2012, 07:24     Определить число часов, прошедших между двумя датами
Посмотрите здесь:

Найти количество полных лет, прошедших между двумя датами C++
Находится ли дата между двумя другими датами C++
Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами C++
Рассчитать количество дней, прошедших между двумя датами C++
C++ Определить число дней между двумя известными датами. Если вторая дата предшествует первой, то результат отрицательный
C++ Вывести разницу дней между двумя датами
Вычислить разницу между двумя датами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
26.09.2012, 23:31     Определить число часов, прошедших между двумя датами #2
Какие твои идеи решения, автор ?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7954 / 4716 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.09.2012, 13:29     Определить число часов, прошедших между двумя датами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <iostream>
 
int main()
{
   namespace dt = boost::gregorian;
   namespace pt = boost::posix_time;
 
   const pt::ptime now = pt::second_clock::universal_time();
   const pt::ptime time = now - dt::days(2);
   std::cout << (now - time).hours() << std::endl;
}
Azart11
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 54
29.09.2012, 18:21  [ТС]     Определить число часов, прошедших между двумя датами #4
ещё как-нибудь можно решить?
Azart11
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 54
03.10.2012, 17:24  [ТС]     Определить число часов, прошедших между двумя датами #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream.h>
#include<conio.h>
int v(int year,int mes,int day)
{int mm[]={31,28,31,30,31,30,31,31,30,31,30,31};
if ((year/4)&&(!(year/100)||(year/400)))
{mm[1]=29;
year=year*366;}
else year=year*365;
int i=0;
int sm=0;
while (i<mes)
{sm=sm+mm[i];
i=i+1;}
int res=(year+sm+day)*24;
return res;
}
 
int main()
{
clrscr();
char s;
int day1,mes1,year1,day2,mes2,year2;
cout<<"vvedite pervuy datu:";
cin>>day1>>s>>mes1>>s>>year1;
cout<<"vvedite vtoruy datu:";
cin>>day2>>s>>mes2>>s>>year2;
int ch1,ch2;
ch1=v(day1,mes1,year1);
ch2=v(day2,mes2,year2);
int raz=ch1-ch2;
cout<<"interval "<<raz<<"chasov";
getch();
return 0;
}
Вот моя программа работает не правильно... скажите пожалуйста как исправить...
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
03.10.2012, 18:19     Определить число часов, прошедших между двумя датами #6
C++
1
2
year=year*366;}
else year=year*365;
Ты *все* года умножаешь на 365 или 366.
Тебе нужно часы для каждого года считать отдельно. Кроме того, кол-во часов во всех высокосных годах одинаково, так же как и невысокосных.

Вообще, попробуй так:
Проверь вывод каждой функции.
Проверь программу для разницы в 1 час, потом в 1 день, месяц и так далее.

Используй cout, что бы смотреть промежуточные результаты.
igorrr37
 Аватар для igorrr37
1599 / 1227 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
03.10.2012, 23:00     Определить число часов, прошедших между двумя датами #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <ctime>
#include <cstring>
 
void SetDate(tm& date)
{
    memset(&date, 0, sizeof(date));
    std::cout << "Year: ";
    std::cin >> date.tm_year;
    date.tm_year -= 1900;
    std::cout << "Month: ";
    std::cin >> date.tm_mon;
    date.tm_mon -= 1;
    std::cout << "Day: ";
    std::cin >> date.tm_mday;
    std::cout << std::endl;
}
 
int main()
{
    tm date1, date2;
    SetDate(date1);
    SetDate(date2);
    std::cout << difftime(mktime(&date2), mktime(&date1)) / 3600 << std::endl;
    return 0;
}
Добавлено через 11 минут
для дат с 1970 по 2038 год
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 22:12     Определить число часов, прошедших между двумя датами
Еще ссылки по теме:

Определить число полных часов и число полных минут, прошедших с начала суток C++
Вывести разницу в днях между двумя датами C++
Количество дней между двумя датами C++
Вычислить количество дней между двумя датами C++
Определить количество дней между двумя датами C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Azart11
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 54
05.10.2012, 22:12  [ТС]     Определить число часов, прошедших между двумя датами #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Код:
 
#include<iostream>
 
int v(int day,int mes,int year)
{
int sumday = 0,rez;
for(int y = 1; y < year; y++)
{
  sumday+= 365;
  if( (y/4)&&(!(y/100)||(y/400)) ) sumday++;
}
 
int mm[]={31,28,31,30,31,30,31,31,30,31,30,31};
for( int m = 1; m < mes; m++)
sumday += mm[m-1];
if( mes>= 3 && (year/4)&&(!(year/100)||(year/400)) ) sumday++;
 
rez=(sumday+day)*24;
return rez;
}
 
using namespace std;
int main()
{
char s;
int day1,mes1,year1,day2,mes2,year2;
cout<<"vvedite pervuy datu:";
cin>>day1>>s>>mes1>>s>>year1;
cout<<"vvedite vtoruy datu:";
cin>>day2>>s>>mes2>>s>>year2;
int ch1,ch2;
ch1=v(day1,mes1,year1);
ch2=v(day2,mes2,year2);
int raz=ch1-ch2;
cout<<"interval "<<raz<<" chasov";
 
return 0;
}
при вводе дат 1/1/2011 и 1/1/2012 выдаёт 8784, когда должно быть 8760
Yandex
Объявления
05.10.2012, 22:12     Определить число часов, прошедших между двумя датами
Ответ Создать тему
Опции темы

Текущее время: 09:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru