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

Вычисление количества дней между датами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 91, средняя оценка - 4.75
tashenka
3 / 3 / 0
Регистрация: 15.11.2010
Сообщений: 31
15.11.2010, 14:52     Вычисление количества дней между датами #1
Всем доброго времени суток!=)
Я только начала изучать С++ и не могу придумать алгоритм вычисления количества дней между датами. Пыталась найти в интернете,но ничего толкового не нашла. Если кто-нибудь уже сталкивался с таким кодом или может подсказать идейку,буду очень благодарна.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
15.11.2010, 19:04     Вычисление количества дней между датами #2
как задается дата?
нужно:
определить месяц
сколько в нём дней
учесть высокосный год
и собственно найти разницу (количество дней)
Tambel
32 / 32 / 2
Регистрация: 10.10.2010
Сообщений: 89
15.11.2010, 21:49     Вычисление количества дней между датами #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;
 
int fun (int,int,int,int);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int g1,g2,m1,m2,d2,i,d,d1,d0,g,dm=0;
    cout<<"Введите 1 дату год мес день"<<endl;
    cin>>g1>>m1>>d1;
    cout<<"Введите 2 дату год мес день"<<endl;
    cin>>g2>>m2>>d2;
    g=g2-g1;
    d0=(g/4)+1;
    d=g*365;
    d+=d0;
    dm=fun (m1,dm,d1,g1);
    d-=dm;
    dm=0;
    dm=fun (m2,dm,d2,g2);
    d+=dm;
    cout<<d;
    cin>>i;
 
        return 0;
}
 
int fun (int m1,int dm,int d1,int g)
{
switch(m1)
    {
    case 1:
        dm=0+d1;
        break;
    case 2:
        dm=31+d1;
        break;
    case 3:
        if (g-(g/4)*4==0)dm=d1+60;
        else dm=59+d1;
        break;
    case 4:
        if (g-(g/4)*4==0)dm=91+d1;
        else dm=90+d1;
        break;
    case 5:
        if (g-(g/4)*4==0) dm=121+d1;
        else dm=120+d1;
        break;
    case 6:
        if (g-(g/4)*4==0) dm=152+d1;
        else dm=151+d1;
        break;
    case 7:
        if (g-(g/4)*4==0) dm=182+d1;
        else dm=181+d1;
        break;
    case 8:
        if (g-(g/4)*4==0) dm=213+d1;
        else dm=212+d1;
        break;
    case 9:
        if (g-(g/4)*4==0) dm=244+d1;
        else dm=243+d1;
        break;
    case 10:
        if (g-(g/4)*4==0) dm=274+d1;
        else dm=273+d1;
        break;
    case 11:
        if (g-(g/4)*4==0) dm=305+d1;
        else dm=304+d1;
        break;
    case 12:
        if (g-(g/4)*4==0) dm=335+d1;
        else dm=334+d1;
        break;
    }
    return dm;
}
Погрешность +-15 дней где то по моим подсчетам, хотя иногда один в один, все от дат зависит)) проверял на http://pers.narod.ru/jscript/datecalc.html хотя не уверен что и там так уж точно)))
tashenka
3 / 3 / 0
Регистрация: 15.11.2010
Сообщений: 31
22.11.2010, 14:16  [ТС]     Вычисление количества дней между датами #4
Все отлично,но к итогу прибавляет лишнюю единицу. Я не могу понять, в каком месте ошибка.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.11.2010, 15:14     Вычисление количества дней между датами #5
Цитата Сообщение от Tambel Посмотреть сообщение
Погрешность +-15 дней где то по моим подсчетам...
Спасибо, улыбнуло

tashenka, вот на С не так давно делал. В принципе должно бы и как С++ программа скомпилироваться...
Tambel
32 / 32 / 2
Регистрация: 10.10.2010
Сообщений: 89
22.11.2010, 16:34     Вычисление количества дней между датами #6
Цитата Сообщение от tashenka Посмотреть сообщение
Все отлично,но к итогу прибавляет лишнюю единицу. Я не могу понять, в каком месте ошибка.
В 17 строчке кода где
C++
1
 d0=(g/4)+1;
надо просто поставить
C++
1
 d0=g/4;
Незнай зачем поставил..)
D1STEMPER
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 6
12.09.2012, 17:35     Вычисление количества дней между датами #7
а как привязать конечную дату к дате на компьютере ???
Darcvizer
0 / 0 / 0
Регистрация: 20.07.2016
Сообщений: 1
20.07.2016, 22:32     Вычисление количества дней между датами #8
Tambel
Коментарии не помешали бы, а то код есть, а вот догнать что к чему не выходит...
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
20.07.2016, 22:51     Вычисление количества дней между датами #9
Цитата Сообщение от tashenka Посмотреть сообщение
Я только начала изучать С++ и не могу придумать алгоритм вычисления количества дней между датами. Пыталась найти в интернете,но ничего толкового не нашла. Если кто-нибудь уже сталкивался с таким кодом или может подсказать идейку,буду очень благодарна.
можно использовать стандартную библиотеку с++
Защита файла-сборки lib
S0lexV
4 / 4 / 0
Регистрация: 27.07.2011
Сообщений: 101
21.07.2016, 00:02     Вычисление количества дней между датами #10
я так делал:
C++
1
int i = abs( (DateTimePicker1->Date - DateTimePicker2->Date ).operator int() );
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2016, 14:45     Вычисление количества дней между датами
Еще ссылки по теме:

Посчитать количество дней между двумя датами C++
C++ Функции вычисления количества дней заданного месяца и количества месяцев между двумя датами
Количество дней между двумя датами C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,663
21.07.2016, 14:45     Вычисление количества дней между датами #11
Цитата Сообщение от Darcvizer Посмотреть сообщение
Коментарии не помешали бы, а то код есть, а вот догнать что к чему не выходит...
Без комментариев!

Добавлено через 14 часов 37 минут
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//алгоритм вычисления количества дней между датами.
///////////////////////////////////////////////////////////////////////////////
#include <ctime>
#include <iostream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
///////////////////////////////////////////////////////////////////////////////
time_t  time_t_of_date
    (
        int     day,
        int     month,
        int     year
    )
{
    std::tm     t;
 
    t.tm_sec    =   0;
    t.tm_min    =   0;
    t.tm_hour   =   0;
    t.tm_mday   =   day;
    t.tm_mon    =   month   -   1;
    t.tm_year   =   year    -   1900;
    t.tm_isdst  =   0;
 
    return  std::mktime( &t );
}
///////////////////////////////////////////////////////////////////////////////
time_t    input_date_and_get_its_time( T_str   const   &   prompt )
{
    std::cout   <<  std::endl
                <<  prompt      <<  ":"     <<  std::endl
                <<  "\tday\t\t: ";
 
    int     day{};
    std::cin    >>  day;
 
    std::cout   <<  "\tmonth\t\t: ";
    int     month{};
    std::cin    >>  month;
 
    std::cout   <<  "\tyear (YYYY)\t: ";
    int     year{};
    std::cin    >>  year;
 
    return  time_t_of_date
                (
                    day,
                    month,
                    year
                );
}
///////////////////////////////////////////////////////////////////////////////
double     time_diff_in_days
    (
        time_t  t_begin,
        time_t  t_end
    )
{
    const   int     SECONDS_PER_DAY     =   60  *   60  *   24;
 
    return      difftime( t_end,  t_begin )
            /   SECONDS_PER_DAY;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    auto    start_time      =   input_date_and_get_its_time( "start date"    );
    auto    finish_time     =   input_date_and_get_its_time( "finish date"   );
 
    std::cout   <<  std::endl
                <<  "days between dates -> "
 
                <<  time_diff_in_days
                        (
                            start_time,
                            finish_time
                        )
 
                <<  std::endl;
}
Yandex
Объявления
21.07.2016, 14:45     Вычисление количества дней между датами
Ответ Создать тему
Опции темы

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