windows下獲取時間和計算時間差的幾種方法總結

2021-06-19 02:11:28 字數 2950 閱讀 8723

一、標準c和c++都可用

1、獲取時間用time_ttime( time_t * timer ),計算時間差使用double difftime( time_t timer1, time_t timer0 )。 精確到秒。

測試程式如下:

[c-sharp]view plain

copy

print?

#include 

#include 

int main()    

本程式在fedora9測試通過。

關於**中的sleep函式,需要注意的是:

1)在windows下,為sleep函式,且包含windows.h

2)關於sleep中的數,在windows和linux下1000代表的含義並不相同,windows下的表示1000毫秒,也就是1秒鐘;linux下表示1000秒,linux下使用毫秒級別的函式可以使用usleep。

2、clock_tclock(),clock()

獲取的是計算機啟動後的時間間隔,得到的是cpu時間,精確到1/clocks_per_sec秒。

測試程式如下:

[c-sharp]view plain

copy

print?

#include 

#include 

int main()    

二、c++中(此處針對windows環境,標準c中則linux和windows都可以)

1、gettickcount()

呼叫函式需包含windows.h。得到的是系統執行的時間 精確到毫秒,測試程式如下:

[c-sharp]view plain

copy

print?

#include 

#include 

using namespace std;  

int main()    

2、getlocaltime()

獲得的是結構體儲存的year,month等資訊。而c語言time函式獲得是從2023年1月1日0時0分0秒到此時的秒數。需要gmtime函式轉換為常用的日曆(返回的是世界時間,要顯示常用的時間,則為localtime函式)。

在c語言中,儲存常用日曆的結構體為struct tm,包含在time.h中,c++語言為systemtime結構體,包含在winbase.h(程式設計包含windows.h即可)。當然,精度肯定為秒了。

測試程式如下:

[c-sharp]view plain

copy

print?

#include 

#include 

using namespace std;  

int main()    

c語言的gmtime方法的示範**如下:

[c-sharp]view plain

copy

print?

#include 

#include 

#include 

int main()    

另外,c語言有類似於getlocaltime方法的函式ctime()。

對localtime(),原型為:struct tm *localtime(const time_t *timep);將測試程式的gmtime改為localtime,則可以看到輸出的時間為爭取時間和日期了。為了更友好的得到時間和日期,像date那樣輸出,可以用asctime或ctime函式,原型:char  *ctime(const time_t  *timeval);測試**如下:

[c-sharp]view plain

copy

print?

#include 

#include 

#include 

int main()    

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

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

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

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

測試程式如下:

[c-sharp]view plain

copy

print?

#include 

#include 

using namespace std;  

int main()    

需要注意的就是結果需要強制轉換為double,不然會得到如下錯誤:<< is ambiguous。

4、timegettime()。

精度:毫秒,與gettickcount()相當。使用需要包含windows.h,並加入winmm.lib(雖然查到資料說需要包含mmsystem.h,不過經驗證,可以不用包含)。測試**如下:

[c-sharp]view plain

copy

print?

#include 

#include //gettickcount  

//#include 

using namespace std;  

int main()    

5、mfc中,ctime::getcurrenttime() 精確到秒,不列出測試**。

關於定時器什麼的,目前用到地方不多,就不總結了

參考**:

1、2、

Windows下C C 獲取當前系統時間

原文 寫軟體時經常要用到獲取系統時間顯示到狀態列,這裡在前人的基礎上總結了一下幾種方案。time t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從1970年1月1日0時0分0秒到此時的秒數,原型是 typedef long time t time value 可以看出time t其實是...

Windows下C C 獲取當前系統時間

time t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從1970年1月1日0時0分0秒到此時的秒數,原型是 typedef long time t time value 可以看出time t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是2038年1月18日19...

獲取windows系統時間

獲取系統時間,這個方法比較簡單 sytimeemtime time getlocaltime time 獲得當前本地時間 getsytimeemtime time 這乙個是獲得格林威治時間,一般不用 sytimeemtime結構說明 typedef struct systemtime systemt...