vc++獲取系統時間

1 使用time_t time( time_t * timer )       精確到秒

  計算時間差使用double difftime( time_t timer1, time_t timer0 )

 

2 使用clock_t clock() 得到的是CPU時間       精確到1/CLOCKS_PER_SEC秒

 

3 使用DWORD GetTickCount() 得到的是系統運行的時間 精確到毫秒

 

4 如果使用MFC的CTime類,可以用CTime::GetCurrentTime() 精確到秒

 

5 要獲取高精度時間,可以使用

       BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)獲取系統的計數器的頻率

       BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)獲取計數器的值

       然後用兩次計數器的差除以Frequency就得到時間。

 

6 還有David的文章中提到的方法:

       Multimedia Timer Functions

       The following functions are used with multimedia timers.

       timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

       timeGetTime/timeKillEvent/TimeProc/timeSetEvent     精度很高

 

GetTickCount()和GetCurrentTime()都只精確到55ms(1個tick就是55ms)。如果要精確到毫秒,應該使用timeGetTime函數或QueryPerformanceCounter函數。

 

GetSystemTime返回的是格林威志標準時間

GetLocalTime,和上面用法一樣,返回的是你所在地區的時間,中國返回的是北京時間

 

VOID GetSystemTime(

LPSYSTEMTIME lpSystemTime // address of system time structure

);

函數就可以獲得了,其中LPSYSTEMTIME 是個結構體

含:年,月,日,周幾,小時,分,秒,毫秒。

 

實例:

1.使用CTime類

CString str;

//獲取系統時間

CTime tm;

tm=CTime::GetCurrentTime();

str=tm.Format("現在時間是%Y年%m月%d日   %X");

MessageBox(str,NULL,MB_OK);

2: 得到系統時間日期(使用GetLocalTime)

SYSTEMTIME st;

CString strDate,strTime;

GetLocalTime(&st);

strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);

strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond);

3.使用GetTickCount

//獲取程序運行時間

long t1=GetTickCount();//程序段開始前取得系統運行時間(ms)

Sleep(500);

long t2=GetTickCount();();//程序段結束後取得系統運行時間(ms)

str.Format("time:%dms",t2-t1);//前後之差即 程序運行時間

AfxMessageBox(str);

//獲取系統運行時間

long t=GetTickCount();

CString str,str1;

str1.Format("系統已運行 %d時",t/3600000);

str=str1;

t%=3600000;

str1.Format("%d分",t/60000);

str+=str1;

t%=60000;

str1.Format("%d秒",t/1000);

str+=str1;

AfxMessageBox(str);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章