VC獲取系統時間 程式執行時間的五種方法

2021-07-07 07:03:33 字數 4097 閱讀 1059

1.

使用ctime類(獲取系統當前時間,精確到秒)

cstring str; //

獲取系統時間

ctime tm;

tm=ctime::getcurrenttime();//

獲取系統日期

str=tm.format("

現在時間是%y年%m月%d日 %x");

messagebox(str,null,mb_ok);

a,從ctimet中提取年月日時分秒

ctime t = ctime::getcurrenttime();

int d=t.getday(); //獲得幾號

int y=t.getyear(); //獲取年份

int m=t.getmonth(); //獲取當前月份

int h=t.gethour(); //獲取當前為幾時

int mm=t.getminute(); //獲取分鐘

int s=t.getsecond(); //獲取秒

int w=t.getdayofweek(); //獲取星期幾,注意1為星期天,7為星期六

b,計算兩段時間的差值,可以使用ctimespan類,具體使用方法如下:

ctime t1( 1999, 3, 19, 22, 15, 0 );

ctime t = ctime::getcurrenttime();

ctimespan span=t-t1; //計算當前系統時間與時間t1的間隔

int iday=span.getdays(); //獲取這段時間間隔共有多少天

int ihour=span.gettotalhours(); //獲取總共有多少小時

int imin=span.gettotalminutes();//獲取總共有多少分鐘

int isec=span.gettotalseconds();//獲取總共有多少秒

c,獲得當前日期和時間,並可以轉化為cstring

ctime tm=ctime::getcurrenttime(); cstring str=tm.format("%y-%m-%d");//顯示年月日

2.使用getlocaltime:windows api 函式,獲取當地的當前系統日期和時間 (精確到毫秒)

此函式會把獲取的系統時間資訊儲存到systemtime結構體裡邊

typedef struct _systemtime

systemtime,*psystemtime; 例:

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) ;

afxmessagebox(strdate);

afxmessagebox(strtime);

3.使用gettickcount:從作業系統啟動到現在所經過(elapsed)的毫秒數,它的返回值是dword。(精確到毫秒)

//獲取程式執行時間

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);

4.使用time_t time( time_t * timer ) :   僅使用c標準庫(精確到秒)

得到從標準計時點(一般是2023年1月1日午夜)到當前時間的秒數

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

struct tm *localtime(const time_t *timer);  取得當地時間,localtime獲取的結果由結構tm返回

返回的字串可以依下列的格式而定:

%a 星期幾的縮寫。eg:tue

%a 星期幾的全名。 eg: tuesday

%b 月份名稱的縮寫。

%b 月份名稱的全名。

%c 本地端日期時間較佳表示字串。

%d 用數字表示本月的第幾天 (範圍為 00 至 31)。日期

%h 用 24 小時制數字表示小時數 (範圍為 00 至 23)。

%i 用 12 小時制數字表示小時數 (範圍為 01 至 12)。

%j 以數字表示當年度的第幾天 (範圍為 001 至 366)。

%m 月份的數字 (範圍由 1 至 12)。

%m 分鐘。

%p 以 ''am'' 或 ''pm'' 表示本地端時間。

%s 秒數。

%u 數字表示為本年度的第幾周,第乙個星期由第乙個週日開始。

%w 數字表示為本年度的第幾周,第乙個星期由第乙個周一開始。

%w 用數字表示本週的第幾天 ( 0 為週日)。

%x 不含時間的日期表示法。

%x 不含日期的時間表示法。 eg: 15:26:30

%y 二位數字表示年份 (範圍由 00 至 99)。

%y 完整的年份數字表示,即四位數。 eg:2008

%z(%z)

時區或名稱縮寫。eg:中國標準時間

%% %

字元。 5.

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

bool queryperformancefrequency(large_integer *lpfrequency)獲取系統的計數器的頻率

bool queryperformancecounter(large_integer *lpperformancecount)獲取計數器的值

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

6. ********** timer functions

the following functions are used with ********** timers.

timebeginperiod/timeendperiod/timegetdevcaps/timegetsystemtime

timegettime/timekillevent/timeproc/timesetevent 精度很高q:

gettickcount()

函式,說是毫秒記數,是真的嗎,還是精確到55毫秒? a:

gettickcount()

和getcurrenttime()都只精確到55ms(1個tick就是55ms)。如果要精確到毫秒,應該使用timegettime函式或queryperformancecounter函式。具體例子可以參考qa001022 "vc++中使用高精度定時器"、qa001813 "如何在windows實現準確的定時"和qa004842 "timegettime函式延時不准"。 q:

vc++

怎樣獲取系統時間,返回值是什麼型別的變數呢?a:

getsystemtime

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

void getsystemtime(

lpsystemtime lpsystemtime // address of system time structure );

函式就可以獲得了,其中lpsystemtime 是個結構體

VC獲取系統時間 程式執行時間

1.使用ctime類 cstring str 獲取系統時間 ctime tm tm ctime getcurrenttime str tm.format 現在時間是 y年 m月 d日 x messagebox str,null,mb ok 2 得到系統時間日期 使用getlocaltime syst...

VC獲取系統時間 程式執行時間

1.使用ctime類 cstring str 獲取系統時間 ctime tm tm ctime getcurrenttime str tm.format 現在時間是 y年 m月 d日 x messagebox str,null,mb ok 2 得到系統時間日期 使用getlocaltime syst...

VC 獲取程式執行時間和系統執行時間

cstring str,str1 獲取程式執行時間 long t1 gettickcount 程式段開始前取得系統執行時間 ms sleep 500 afxmessagebox do something.long t2 gettickcount 程式段結束後取得系統執行時間 ms str.forma...