2013-01-21 105 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

相关问题