C 使用localtime函式需要注意的地方

2021-12-29 20:38:35 字數 1515 閱讀 2158

在處理時間時用到了localtime這個函式,將乙個utc時間轉為本地時間:

[cpp]

#include  

time_t tmnow = time(null); 

tm *ptmnow = localtime(&tmnow);  //從tm結構體中可以取到年月日時分秒等值。 

這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果連續呼叫這個函式會有問題。

很多時候我們會同時處理兩個時間,例如表示時間段的【起始時間】【結束時間】,**如下:

[cpp] 

time_t tmbegin = 1351118531;    //2012-10-25 06:42:11 

time_t tmend = 1351218731;      //2012-10-26 10:32:11 

tm* ptmbegin = localtime(&tmbegin ); 

tm* ptmend = localtime(&tmend );//第二次呼叫會修改上次呼叫的tm結構體,若上次的資料未儲存則會丟失 

//tm* ptm3 = gmtime(&tmend );       //效果同上條語句,也會重寫之前的資料 

char ctmbegin1[26], ctmend[26]; 

strftime(ctmbegin, 26, "%y%m%d%h%m%s", ptmbegin);   //這裡輸出的將是tmend的時間值 

strftime(ctmend, 26, "%y%m%d%h%m%s", ptmend); 

/*msdn中有相關說明:

both the 32-bit and 64-bit versions ofgmtime, mktime, mkgmtime, and localtimeall 

use a single tm structure per thread for the conversion. each call to one of these 

routines destroys the result of the previous call. 

*/ 所以要記住,一旦呼叫了localtime函式,應該馬上取出tm結構中的內容:

[cpp]

time_t tmbegin = 1351118531;        //2012-10-25 06:42:11 

time_t tmend = 1351218731;      //2012-10-26 10:32:11 

char ctmbegin1[26], ctmend[26]; 

tm* ptmbegin = localtime(&tmbegin ); 

strftime(ctmbegin, 26, "%y%m%d%h%m%s", ptmbegin); 

tm* ptmend = localtime(&tmend );     

strftime(ctmend, 26, "%y%m%d%h%m%s", ptmend); 

//tm* ptm3 = gmtime(&tmend ); 

C 使用localtime函式需要注意的地方

cpp include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果連續呼叫這個函式會有問題。很多時候我們會同時處理兩...

C 使用localtime函式需要注意的地方

cpp view plain copy include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果 連續呼叫這個函式...

localtime函式在不同平台使用注意

1.寫在前面 localtime函式是c語言標準庫中時間庫 time.h 中獲取系統帶時區時間的函式,獲得的時間最終以 strcut tm 的格式輸出。對於通用作業系統如windows linux中呼叫該函式,那麼獲得的時間就是帶時區的,這一點毫無疑問。而在一些嵌入式場合,我們也會面臨將時間戳轉換成...