2014-05-04 28 views
0

我有unixtime字符串,我想用小時和分鐘比較它們。將Unixtime轉換爲可比較的時間

例如:

unixtime1 = 「1327418725」 unixtime2 = 「1327511595」

time_t convertUnixToTime(const char* unixtime){ 

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

我使用的功能,例如:

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; 

和我得到的輸出:

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

我不明白爲什麼我會得到同樣的時間,而且我希望能夠在difftime()之後查看它們分開的時間和分鐘數。

任何建議/見解?

回答

1

localtime()返回一個指向庫中不可或缺的對象的指針。您在timeinfo1和timeinfo2中存儲此指針兩次。

你需要複製結構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

但不會更新它在本地時間的第二個呼叫()?它工作順便說一句,謝謝! – jshah

+0

這就是問題所在。 localtime()正在更新每個調用指向的結構。但每次都是一樣的結構。如果你編寫一個小程序連續幾次調用localtime()並打印指針的值,你會發現每次調用後指針都包含相同的地址。 –