已知日期,计算天数,该怎么解决
已知日期,计算天数
已知两个日期,他们为CString类型或string类型的,如2007/01/28、2007/02/01
用什么方法可以计算出他们之间的天数
------解决方案--------------------
time_t XGetCurTime() { return time(NULL); }
int OutTimeStr(struct tm * pTimer, char* szBuf, char cPre, int nCount)
{
char szFormat[MAX_PATH] = {0};
int i,nTmp=1;
if(nCount == 1)
{
sprintf(szFormat, "%%d ");
nTmp = 10000;
}
else
{
sprintf(szFormat, "%%0%dd ", nCount);
for(i = 0; i < nCount; ++i) nTmp *= 10;
}
switch(cPre)
{
case 'Y ':
sprintf(szBuf, szFormat, (pTimer-> tm_year + 1900) % nTmp);
break;
case 'M ':
sprintf(szBuf, szFormat, (pTimer-> tm_mon + 1) % nTmp);
break;
case 'D ':
sprintf(szBuf, szFormat, pTimer-> tm_mday % nTmp);
break;
case 'h ':
sprintf(szBuf, szFormat, pTimer-> tm_hour % nTmp);
break;
case 'm ':
sprintf(szBuf, szFormat, pTimer-> tm_min % nTmp);
break;
case 's ':
sprintf(szBuf, szFormat, pTimer-> tm_sec % nTmp);
break;
default:
break;
}
return strlen(szBuf);
}
const char* XTimeToString(time_t time, const char* szFormat, char szBuf[MAX_PATH])
{
int i,nLen,nCount=0;
char cPre = 0;
BOOL bStart=FALSE;
struct tm *ptmTime = NULL;
char szFormatDefault[256] = "YYYY-MM-DD hh:mm:ss ";
const char* pTmp;
char* pBuf;
if(szFormat == NULL) szFormat = szFormatDefault;
if(time == 0) time = XGetCurTime();
memset(szBuf, 0, sizeof(szBuf));
pTmp = szFormat;
pBuf = szBuf;
ptmTime = localtime(&time);
nLen = strlen(pTmp) + 1;
for(i = 0; i < nLen; ++i)
{
switch(*pTmp)
{
case 'Y ':
case 'M ':
case 'D ':
case 'h ':
case 'm ':
case 's ':
if(bStart)
{
if(cPre == *pTmp)
{
++nCount;
}
else
{
if(bStart) pBuf += OutTimeStr(ptmTime, pBuf, cPre, nCount);
cPre = *pTmp;
nCount= 1;
}
}
else
{
bStart = TRUE;
cPre = *pTmp;
++nCount;
}
break;
default:
if(bStart) pBuf += OutTimeStr(ptmTime, pBuf, cPre, nCount);
nCount = cPre = 0;
bStart = FALSE;
*pBuf = *pTmp;
++pBuf;
break;
}
++pTmp;
}
return szBuf;
}
BOOL GetTimeVal(struct tm * ptmTime, const char* pStr, char cPre, int nTime)
{
BOOL bRet = FALSE;
char szTmp[MAX_PATH]={0};
int i;
memcpy(szTmp, pStr, nTime);
for(i = 0; i < nTime; ++i)
{
if(szTmp[i] < '0 ' || szTmp[i] > '9 ') return bRet;
}
switch(cPre)
{
case 'Y ':
if(nTime == 2)
{
ptmTime-> tm_year = atoi(szTmp) + 100;
}
else
{
ptmTime-> tm_year = atoi(szTmp) - 1900;
}
if(ptmTime-> tm_year > = 0) bRet = TRUE;
break;
case 'M ':
ptmTime-> tm_mon = atoi(szTmp) - 1;
if(ptmTime-> tm_mon > = 0 && ptmTime-> tm_mon < 12) bRet = TRUE;
break;
case 'D ':
ptmTime-> tm_mday = atoi(szTmp);
if(ptmTime-> tm_mday > 0 && ptmTime-> tm_mday < 32) bRet = TRUE;
已知两个日期,他们为CString类型或string类型的,如2007/01/28、2007/02/01
用什么方法可以计算出他们之间的天数
------解决方案--------------------
time_t XGetCurTime() { return time(NULL); }
int OutTimeStr(struct tm * pTimer, char* szBuf, char cPre, int nCount)
{
char szFormat[MAX_PATH] = {0};
int i,nTmp=1;
if(nCount == 1)
{
sprintf(szFormat, "%%d ");
nTmp = 10000;
}
else
{
sprintf(szFormat, "%%0%dd ", nCount);
for(i = 0; i < nCount; ++i) nTmp *= 10;
}
switch(cPre)
{
case 'Y ':
sprintf(szBuf, szFormat, (pTimer-> tm_year + 1900) % nTmp);
break;
case 'M ':
sprintf(szBuf, szFormat, (pTimer-> tm_mon + 1) % nTmp);
break;
case 'D ':
sprintf(szBuf, szFormat, pTimer-> tm_mday % nTmp);
break;
case 'h ':
sprintf(szBuf, szFormat, pTimer-> tm_hour % nTmp);
break;
case 'm ':
sprintf(szBuf, szFormat, pTimer-> tm_min % nTmp);
break;
case 's ':
sprintf(szBuf, szFormat, pTimer-> tm_sec % nTmp);
break;
default:
break;
}
return strlen(szBuf);
}
const char* XTimeToString(time_t time, const char* szFormat, char szBuf[MAX_PATH])
{
int i,nLen,nCount=0;
char cPre = 0;
BOOL bStart=FALSE;
struct tm *ptmTime = NULL;
char szFormatDefault[256] = "YYYY-MM-DD hh:mm:ss ";
const char* pTmp;
char* pBuf;
if(szFormat == NULL) szFormat = szFormatDefault;
if(time == 0) time = XGetCurTime();
memset(szBuf, 0, sizeof(szBuf));
pTmp = szFormat;
pBuf = szBuf;
ptmTime = localtime(&time);
nLen = strlen(pTmp) + 1;
for(i = 0; i < nLen; ++i)
{
switch(*pTmp)
{
case 'Y ':
case 'M ':
case 'D ':
case 'h ':
case 'm ':
case 's ':
if(bStart)
{
if(cPre == *pTmp)
{
++nCount;
}
else
{
if(bStart) pBuf += OutTimeStr(ptmTime, pBuf, cPre, nCount);
cPre = *pTmp;
nCount= 1;
}
}
else
{
bStart = TRUE;
cPre = *pTmp;
++nCount;
}
break;
default:
if(bStart) pBuf += OutTimeStr(ptmTime, pBuf, cPre, nCount);
nCount = cPre = 0;
bStart = FALSE;
*pBuf = *pTmp;
++pBuf;
break;
}
++pTmp;
}
return szBuf;
}
BOOL GetTimeVal(struct tm * ptmTime, const char* pStr, char cPre, int nTime)
{
BOOL bRet = FALSE;
char szTmp[MAX_PATH]={0};
int i;
memcpy(szTmp, pStr, nTime);
for(i = 0; i < nTime; ++i)
{
if(szTmp[i] < '0 ' || szTmp[i] > '9 ') return bRet;
}
switch(cPre)
{
case 'Y ':
if(nTime == 2)
{
ptmTime-> tm_year = atoi(szTmp) + 100;
}
else
{
ptmTime-> tm_year = atoi(szTmp) - 1900;
}
if(ptmTime-> tm_year > = 0) bRet = TRUE;
break;
case 'M ':
ptmTime-> tm_mon = atoi(szTmp) - 1;
if(ptmTime-> tm_mon > = 0 && ptmTime-> tm_mon < 12) bRet = TRUE;
break;
case 'D ':
ptmTime-> tm_mday = atoi(szTmp);
if(ptmTime-> tm_mday > 0 && ptmTime-> tm_mday < 32) bRet = TRUE;