2011-03-02 6 views
0

J'ai le code suivant pour trouver la différence entre le fuseau horaire UTC et le fuseau horaire local.C++ - Conversion de fuseau horaire

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; 

Cela ne fonctionne pas. Cependant, si je déplace l'instruction gmt_time = gmtime (& t) ci-dessous int y = mktime (heure locale); Ça marche. C'est le morceau de code suivant fonctionne:

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; 

Cela semble bizarre à moi .. Des indices? Localtime et gmtime retournent tous les deux un pointeur sur un struct tm.

Répondre

2

Cette structure est définie quelque part dans la bibliothèque C et peut facilement être la même pour les deux fonctions. Quelque chose comme ci-dessous.

struct tm temp; 

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

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

L'emplacement de temp pourrait être le même. Mais gmtime() et localtime() devraient modifier "temp" à leur manière? Ce que je trouve est que seul le premier appel (gmtime() ou localtime()) modifie la structure. – Prabhu

+1

Puisque gmtime et localtime retournent des pointeurs vers la même structure, les deux pointeurs local_time et gmt_time pointent vers les mêmes données. Lorsque vous appelez gmtime, les données pointées par local_time sont mises à jour et il vous reste deux pointeurs sur la même structure tm, ce qui vous donnera une différence de fuseau horaire de 0. – Erik

Questions connexes