我的 ThermalTest 程式,在顯示 "已經過" 的時間時,會出現奇怪的問題,似乎所有的參數都往後移一位,原本顯示 "秒" 的變成 "分"、顯示 "分" 的變成 "小時",依此類推。 // TODO: Add your message handler code here and/or call default CTime tNow = CTime::GetCurrentTime(); CString str, strResult, strFile; // 經過時間 CTimeSpan tPeriod = tNow - m_tStart; strResult.Format("%04d/%02d/%02d %02d:%02d:%02d", tNow.GetYear(), tNow.GetMonth(), tNow.GetDay(), tNow.GetHour(), tNow.GetMinute(), tNow.GetSecond()); strFile = strResult; str.Format(" 已經過 %d 天 %02d:%02d:%02d\n", tPeriod.GetDays() , tPeriod.GetHours(), tPeriod.GetMinutes(), tPeriod.GetSeconds()); strResult += str; 後來發現是 GetDays( ) 造成的,它的傳回值是 LONGLONG,但是 Format 只用 %d,因此造成參數溢位往後推擠,只要將 %d 改成 %lld 就可以了。 參考: Size and Distance Specification 另發現我當時有另一種解法,但不知為何程式沒有 Release str = tPeriod.Format(_T(" 已經過 %D 天 %H:%M:%S\n")); 參考: CTimeSpan::Format