2013-01-21 77 views
5

我有簡單的函數,我需要從時間戳返回人類可讀的日期時間但不知何故 它返回以秒爲同一timestam:C++時間戳人類可讀的日期時間函數

輸入1356953890

std::string UT::timeStampToHReadble(long timestamp) 
{ 
    const time_t rawtime = (const time_t)timestamp; 

    struct tm * dt; 
    char timestr[30]; 
    char buffer [30]; 

    dt = localtime(&rawtime); 
    // use any strftime format spec here 
    strftime(timestr, sizeof(timestr), "%m%d%H%M%y", dt); 
    sprintf(buffer,"%s", timestr); 
    std::string stdBuffer(buffer); 
    return stdBuffer; 
} 

輸出1231133812

這是我如何稱呼它:

long timestamp = 1356953890L ; 
std::string hreadble = UT::timeStampToHReadble(timestamp); 
std::cout << hreadble << std::endl; 

,輸出爲:1231133812 ,我什麼要somekind的這種格式:31/1/2012年11:38:10 什麼即時通訊在這裏失蹤?

UTDATE:
溶液 的strftime(TIMESTR,的sizeof(TIMESTR), 「%H:%M:%S%d /%米/%Y」,DT);

+0

什麼是時間戳?它是毫秒還是秒? – Dariusz

+2

爲什麼你有一個臨時的'buffer'和'stdBuffer'變量?通過'strftime'創建的字符串應該是不夠的,你應該能夠只是做'回報TIMESTR;',或最壞的情況下'返回的std :: string(TIMESTR);'。 –

+0

@JoachimPileborg問自己同樣的事情。也許他濫用字符串流運算符重載早期;-) – Najzero

回答

5

可以歸結爲:

std::string UT::timeStampToHReadble(const time_t rawtime) 
{ 
    struct tm * dt; 
    char buffer [30]; 
    dt = localtime(&rawtime); 
    strftime(buffer, sizeof(buffer), "%m%d%H%M%y", dt); 
    return std::string(buffer); 
} 

變化:

  • 我寧願做功能外鑄件。如果調用者擁有time_t數據,在調用函數之前將time_t強制轉換爲long是很奇怪的。
  • 這是沒有必要有兩個緩衝區(因此沒有必要與sprintf的複製)
+0

你的意思'的strftime(緩衝液,的sizeof(緩衝液), 「%米%d%H%M%Y」 DT,);'上倒數第二行? –

+0

是的,我沒有更新代碼。現在應該編譯。 – ormurin

相關問題