我想做个计时器,可以输入持续时间,然后通过当前时间和持续时间的相加得到停止时间,这样我可以在那个时间停止计时器,现在的问题是我如果输入持续一百天,我该怎样算终止时间,如果碰到2月,又该怎么算。
或者谁有更好的思路

解决方案 »

  1.   

    获取当天时间,与当月的时间差 p ,
    若 p 小于 输入的持续时间t,再算次月天数,依次操作,最终算出后到期的是哪天,
    ////获取本月的时间
    BOOL CReportTableView::GetLocalMonth(SYSTEMTIME &timeBegin, SYSTEMTIME &timeEnd)
    {
    SYSTEMTIME timeToday ; 
    GetLocalTime(&timeToday) ;
    timeToday.wHour=0;timeToday.wMinute=0;timeToday.wSecond=0;timeToday.wMilliseconds=0;

    ////本月开始时间;
    timeBegin = timeToday ; 
    timeBegin.wDay = 1 ;
    int nRelativeDate =0 ;
    SYSTEMTIME timeTemp ;

    CTimeSpan spadd(31,0,0,0) ;
    CTime t1(timeBegin) ;
    t1 += spadd  ; ////取31天后的日期
    t1.GetAsSystemTime(timeTemp) ; 
    nRelativeDate = 31 - timeTemp.wDay + 1 ; ////获取天
    timeEnd = timeBegin ; 
    timeEnd.wDay = nRelativeDate ;  timeBegin.wHour=0;timeBegin.wMinute=0;timeBegin.wSecond=0;timeBegin.wMilliseconds=0;
    timeEnd.wHour=23;timeEnd.wMinute=59;timeEnd.wSecond=59;timeBegin.wMilliseconds=0;
    return TRUE ; 
    }
      

  2.   

    timeBegin 为本月第一天,timeEnd 为本月最后一天。
      

  3.   

    union 
    {
      FILETIME ft;
      ULONGLONG lltime;
    }dt; SYSTEMTIME st;
    ULONGLONG dwDuration=UInt32x32To64(days*24*60*60,10000000); // 时间间隔转化成以100ns为单位 GetLocalTime(&st);
    SystemTimeToFileTime(&st, &dt.ft); dt.lltime+=dwDuration; FileTimeToSystemTime(&dt.ft, &st); TCHAR szText[100];
    wsprintf(szText, TEXT("%4d-%2d-%2d"), st.wYear, st.wMonth, st.wDay);
    MessageBox(NULL, szText, 0,0);