2011-03-02 60 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