2014-05-04 7 views
0

J'ai des chaînes d'unixtime et je veux les comparer par heures et minutes.conversion Unixtime à temps comparable

Par exemple:

unixtime1 = "1327418725" unixtime2 = "1327511595"

time_t convertUnixToTime(const char* unixtime){ 

time_t time = (time_t)atol(unixtime); 
return time; 
} 

utiliser la fonction en tant que telle:

time_t time1 = convertUnixToTime("1327418725"); 
struct tm *timeinfo1; 
timeinfo1 = localtime(&time1); 

time_t time2 = convertUnixToTime("1327511595"); 
struct tm *timeinfo2; 
timeinfo2 = localtime(&time2); 

cout << "time: " << asctime(timeinfo1);// << endl; 
cout << "time: " << asctime(timeinfo2);// << endl; 

et je reçois la sortie:

time: Wed Jan 25 09:13:15 2012 
time: Wed Jan 25 09:13:15 2012 

Je ne peux pas comprendre pourquoi je reçois la même heure et aussi je veux être capable de difftime() après pour voir combien HEURES et MINUTES ils sont séparés.

Des suggestions/un aperçu? Localtime() renvoie un pointeur sur un objet faisant partie intégrante de la bibliothèque.

Répondre

1

Vous stockez ce pointeur deux fois dans timeinfo1 et timeinfo2.

Vous devez copier le struct tm

#include <ctime> 
#include <cstdlib> 
#include <iostream> 

time_t convertUnixToTime(const char* unixtime){ 

    time_t time = (time_t)atol(unixtime); 
    return time; 
} 


using namespace std; 

int main() 
{ 
    time_t time1 = convertUnixToTime("1327418725"); 
    struct tm timeinfo1; 
    timeinfo1 = *localtime(&time1); 

    time_t time2 = convertUnixToTime("1327511595"); 
    struct tm timeinfo2; 
    timeinfo2 = *localtime(&time2); 

    cout << "time: " << asctime(&timeinfo1);// << endl; 
    cout << "time: " << asctime(&timeinfo2);// << endl; 

    return 0; 
} 
+0

Mais ne pas le mettre à jour sur le deuxième appel de localtime()? Ca marche btw, merci! – jshah

+0

C'est le problème. localtime() met à jour la structure pointée sur chaque appel. Mais c'est la même structure à chaque fois. Si vous écrivez un petit programme pour appeler localtime() plusieurs fois de suite et que vous imprimez la valeur du pointeur, vous verrez que le pointeur contient la même adresse après chaque appel. –