C++中时间处理并不复杂,特别是MFC里,封装了一堆好用的类。只是平时用得比较少,所以一些常用的操作却也不知如何做起。下面做个总结。
1. 有个字符串表示时间,如“2011-6-27 19:24:37”或“2011-6-27 下午 07:24:37”,如何从中取出所需的部分?如年月日时分秒?
CString strTime="2004-10-27 下午 07:24:37";
COleVariant vtime(strTime);
vtime.ChangeType(VT_DATE);
COleDateTime time=vtime;
int n=time.GetHour();
CString str;
str.Format("%d",n);
AfxMessageBox(str);
2. 时间先后可否比较?例如判断当前时间是否在10:57:40之后?
CString str1,str2;
CTime time1=CTime::GetCurrentTime();
int nYear=time1.GetYear();
int nMonth=time1.GetMonth();
int nDay=time1.GetDay();
int nHour=time1.GetHour();
int nMinute=time1.GetMinute();
int nSecond=time1.GetSecond();
CTime time2(nYear,nMonth,nDay,10,57,40);
if (time1>time2 )
AfxMessageBox("1");
else
AfxMessageBox("2");
CTime和COleTime相互转换:
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime
3. 求当前时间2天前的时间怎么求?如2011-7-1那天2天前的时间就是2011-6-29
CTime sTime,eTime; //定义当前系统时间和2天前的时间
eTime = CTime::GetCurrentTime(); //获取系统时间
CTimeSpan TimeSpan(2,0,0,0); //sTime和eTime之间相差2天
sTime = eTime - TimeSpan;
其中CTimeSpan的构造函数如下:
CTimeSpan( );
CTimeSpan( const CTimeSpan& timeSpanSrc );
CTimeSpan( time_t time );
CTimeSpan( LONG lDays, int nHours, int nMins, int nSecs );
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime