2011-03-02 83 views
0

我有以下一段代碼來查找UTC和本地時區之間的區別。C++ - 時區轉換

struct tm *local_time, *gmt_time; 
    time_t t = time(NULL); 
    local_time = localtime(&t); 
    gmt_time = gmtime(&t); 
    int y = mktime(local_time); 
    int x = mktime(gmt_time);  
    tzone_diff = y - x; 

這是行不通的。但是,如果我將語句gmt_time = gmtime(& t)移到int y = mktime(local_time)以下;有用。這是下面的一段代碼作品:

struct tm *local_time, *gmt_time; 
time_t t = time(NULL); 
local_time = localtime(&t); 
int y = mktime(local_time); 
gmt_time = gmtime(&t); 
int x = mktime(gmt_time);  
tzone_diff = y - x; 

這似乎對我很奇怪..任何線索?

回答

2

localtime和gmtime都返回一個指向struct tm的指針。這個struct tm是在C庫的某個地方定義的,並且對於這兩個函數都可以很容易。像下面的東西。

struct tm temp; 

struct tm * gmtime() { 
    ... 
    return &temp; 
} 

struct tm * localtime() { 
    ... 
    return &temp; 
} 
+0

temp的位置可能相同。但gmtime()和localtime()應該以他們自己的方式修改「temp」嗎?我發現只有第一次調用gmtime()或localtime())才能修改結構。 – Prabhu 2011-03-02 11:06:23

+1

由於gmtime和localtime返回指向同一結構體的指針,因此兩個指針local_time和gmt_time將指向相同的數據。當你調用gmtime時,由local_time指向的數據被更新,並且你留下了兩個指向同一個struct tm的指針,這會給你一個0的時區差異。 – Erik 2011-03-02 11:09:50