为了方便说明问题,函数如下:CString GetNewTime(CString sOldTime, int iDays)
{
    ...
}即GetNewTime( "2003-12-17", 30 ) = "2003-11-17"

解决方案 »

  1.   

    几天前看到的
    http://expert.csdn.net/Expert/topic/2561/2561297.xml?temp=.1914026
      

  2.   

    COleDateTime odt1(2003, 12, 14);
    COleDateTime odt2 = odt1 + COleDateTimeSpan(2);
      

  3.   

    CString str = "2003-12-17";
    CString strYear, strMonth, strDay;
    strYear  = str.Left(4);
    strMonth = str.Mid(5, 2);
    strDay   = str.Right(2);COleDateTime odt(atoi(strYear), atoi(strMonth), atoi(strDay), 0, 0, 0);
    COleDateTimeSpan odts(16, 0, 0, 0);
    COleDateTime o = odt- odts;
    str = o.Format(_T("%Y-%m-%d"));
    return str;
      

  4.   

    用COleDateTime和COleDateTimespan就可以搞定
    你看看msdn
    楼上也说的差不多了

    !!
      

  5.   

    其实这个问题有一个比较好的方法,
    1 你用GetLocalTime得到一个SYSTIME
    2, 然后SystemTimeToFileTime,得到一个FileTime
    3  然后进行一个64位数的减法,得到新的FileTime,
    4  然后用  FileTimeToSystemTime 得到新的SYSTIME
    3中要注意FileTIme是一个64位的数,而他的单位是100-nanosecond
    所以要减那么就是(x天=24*60*60*10^7*x)当然处理64位的数不是那么方便,那么就可以只用FILETIME高32位
    因为10^7*60*60*24 / 2^32=201.165676
    所以,过去一天那么FILETIME高32位会加201 ,那么
    你只需要处理高32位就可以了。 上面的东西都是标准API,,
    大家明白吗?
      

  6.   

    strCString="2003-10-27 6:24:37"; //CString--->COleDateTime
    COleVariant vtime(strCString);
    vtime.ChangeType(VT_DATE);
    COleDateTime time4=vtime;
    然后使用COleDateTimeSpan一减就行了