Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Visual Studio 2008 c++ Разница между 2-мя датами в днях

37K
09 июня 2009 года
Resager
12 / / 19.09.2008
помогите найти Разница между 2-мя датами в днях, я работаю с MFC, перелопатил кучу форумов (на вашем есть подобная тема) но у меня либо не работает, либо выдаёт 0.

Помогите пожалуйста.

И какие библиотеки подключать (ашки) я тоже не вкурсе (для работы с датой).

Друг посоветовал вот так:

Цитата:
CString temp1;
int tt;
tm tm1,tm2;

memset(&tm1,0,sizeof(tm1));
memset(&tm2,0,sizeof(tm2));

tm2.tm_mday=1;
tm2.tm_mon=2;
tm2.tm_year=2009;
tm1.tm_mday=1;
tm1.tm_mon=1;
tm1.tm_year=2009;

tm2.tm_hour=0;
tm2.tm_isdst=0;
tm2.tm_min=0;
tm2.tm_sec=0;
tm2.tm_wday=0;
tm2.tm_yday=0;

tm1.tm_hour=0;
tm1.tm_isdst=0;
tm1.tm_min=0;
tm1.tm_sec=0;
tm1.tm_wday=0;
tm1.tm_yday=0;

tt=mktime(&tm2)-mktime(&tm1);

temp1.Format("%d", tt);
MessageBox(temp1);
temp1.Format("%d", mktime(&tm2));
MessageBox(temp1);



Но выдаёт в первой мессаге 0
и во второй -1
:(

2.2K
10 июня 2009 года
REFOT
181 / / 08.04.2005
 
Код:
COleDateTime time1(2009,6,10,21,10,10);
COleDateTime time2(2009,6,1,5,32,21);
COleDateTimeSpan time3 = time1-time2;
int days = time3.GetDays();
37K
10 июня 2009 года
Resager
12 / / 19.09.2008
REFOT, Спасибо огромное!!!

Может кому пригодится, вот готовая функция, возвращающая количество дней из 2-х строк даты:

Код:
// Function Returns namber from data1 to data2
static int datsdifference(CString data1, CString data2)
{
    int z,y,intsfp_data3[4],sumdays,len;
        CString sfp_data3[4],temp1;
    len = strlen(data1);
    for (z=0,y=0; z<3; z++)
            {
                while (data1[y]!='.')
                {
                    sfp_data3[z]+=data1[y];
                    y++;
                    if (y > len)
                        break;
                }
                y++;
                intsfp_data3[z]=atoi(CString(sfp_data3[z]));
            }
    if (intsfp_data3[2]<2000)
        intsfp_data3[2] += 2000;
    COleDateTime time1(intsfp_data3[2],intsfp_data3[1],intsfp_data3[0],0,0,0);

    for (z=0; z<3; z++)
        {
            sfp_data3[z] = "";
        }

    len = strlen(data2);
    for (z=0,y=0; z<3; z++)
            {
                while (data2[y]!='.')
                {
                    sfp_data3[z]+=data2[y];
                    y++;
                    if (y > len)
                        break;
                }
                y++;
                intsfp_data3[z]=atoi(CString(sfp_data3[z]));
            }
    if (intsfp_data3[2]<2000)
        intsfp_data3[2] += 2000;
    COleDateTime time2(intsfp_data3[2],intsfp_data3[1],intsfp_data3[0],0,0,0);
    COleDateTimeSpan time3 = time2-time1;
    sumdays = time3.GetDays();
    return sumdays;
}
2.2K
10 июня 2009 года
REFOT
181 / / 08.04.2005
Можно проще:

 
Код:
COleDateTime time1;
time1.ParseDateTime(_T("1.6.2009"),VAR_DATEVALUEONLY);
COleDateTime time2;
time2.ParseDateTime(_T("10.6.2009"),VAR_DATEVALUEONLY);
COleDateTimeSpan time3 = time2-time1;
int day = time3.GetDays();
37K
10 июня 2009 года
Resager
12 / / 19.09.2008
Спасибо. Мне стыдно...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог