就是日期方面的计算,加几天减几天,然后输出新的年月日,有什么现成的库函数之类可用么?

解决方案 »

  1.   

    用MFC的话,CTime+CTimeSpan就行了。不用MFC也好办,因为CTime,CTimeSpan就是对time_t的封装,是距1970年某一天的秒数,想加15天,就加15*24*3600就行了。
    CTime time(nYear, nMonth, nDay, nHour, nMin, nSec);
    CTimeSpan span(lDays, nHours, nMins, nSecs );
    time += span;
      

  2.   

    呵呵,你先自己搜索下,我以前回复过这类贴子的~~#include <afx.h>
    #include <afxdisp.h>/********************************************************************
    *  Function: SubTime      
    *  Description: 计算两个日期天数之差   
    *  Input: CString strStart [开始时间,如2010-05-28] 
    * CString strEnd [结束时间,如2010-06-28] 
    *  Output: None
    *  Return: CString [天数差]     
    *  Others:      None   
    *********************************************************************/
    CString SubTime(CString strStart,CString strEnd)
    {
    CString  strDates = "0";
    if(strStart.IsEmpty() || strEnd.IsEmpty())
    {
    return strDates;
    }

    COleVariant  vtime1(strStart);
    COleVariant  vtime2(strEnd);
    vtime1.ChangeType(VT_DATE);
    vtime2.ChangeType(VT_DATE);

    COleDateTime timeS = vtime1;
    COleDateTime timeE = vtime2;
    SYSTEMTIME  stS,stE;
    VariantTimeToSystemTime(timeS,&stS);
    VariantTimeToSystemTime(timeE,&stE);

    CTime tmS(stS);
    CTime tmE(stE);
    CTimeSpan span = tmE-tmS;
    strDates.Format("%d",span.GetDays());
    return strDates;
    }
    /********************************************************************
    *  Function: AddTime      
    *  Description: 计算某日期,若干天后的日期   
    *  Input: CString strStart [开始时间,如2010-02-25] 
    * int     nDays [天数] 
    *  Output: None
    *  Return: CString [nDays天后的日期]     
    *  Others:      None   
    *********************************************************************/
    CString AddDates(CString strDate,int nDays)
    {
    CString strTemp = "";
    if(strDate.IsEmpty())
    {
    return strTemp;
    }

    COleVariant  vtime(strDate);
    vtime.ChangeType(VT_DATE);

    COleDateTime time = vtime;
    SYSTEMTIME  st;
    VariantTimeToSystemTime(time,&st);

    CTime tm1(st);
    CTime tm2(tm1.GetYear(),tm1.GetMonth(),tm1.GetDay() + nDays,0,0,0);

    strTemp.Format("%04d-%02d-%02d",tm2.GetYear(),tm2.GetMonth(),tm2.GetDay());
    return strTemp;
    }void main()
    {
        MessageBox(NULL,SubTime("2010-02-01","2010-03-01"),NULL,NULL);
        MessageBox(NULL,AddDates("2010-02-25",10),NULL,NULL);
    }
      

  3.   

    这句有问题吧,如果基准日期为2010-06-30,nDays = 5,那么这句就会出错,月份不会自动累加,CTime中的ASSERT(nDay>=1 && nDay<=31)也会报错~还有什么别的解决办法么?简洁点的,现成的...不用自己做一堆判断的..