COleDateTime time1(2009,6,10,21,10,10);
COleDateTime time2(2009,6,1,5,32,21);
COleDateTimeSpan time3 = time1-time2;
int days = time3.GetDays();
Visual Studio 2008 c++ Разница между 2-мя датами в днях
Помогите пожалуйста.
И какие библиотеки подключать (ашки) я тоже не вкурсе (для работы с датой).
Друг посоветовал вот так:
Цитата:
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);
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-х строк даты:
Код:
// 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;
}
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;
}
Код:
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();
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();
Спасибо. Мне стыдно...