2013-01-21 3 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 и я, что это должно быть в некотором роде этого формата: 31/1/2012 11:38:10 что здесь пропало?

UTDATE:
раствор STRFTIME (timestr, SizeOf (timestr), "% H:% M:% S% d /% м /% Y", дт);

+0

, что отметка о времени? Это в миллисекундах или секундах? – Dariusz

+2

Почему у вас есть временные переменные 'buffer' и' stdBuffer'? Строка, созданная 'strftime', должна быть достаточной, и вы должны иметь возможность просто выполнить return timestr;' или худший случай 'return std :: string (timestr);'. –

+0

@ Джойхим Пилеборг задавал себе одно и то же. Возможно, он злоупотреблял загрузкой оператора струнного потока раньше ;-) – 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.
  • Это не обязательно иметь два буфера (и, следовательно, не нужно копировать с Sprintf)
+0

Вы имеете в виду 'strftime (buffer, sizeof (buffer),"% m% d% H% M% y ", dt);' на этой секунде до последней строки? –

+0

Да, я обновил код. Должен компилироваться сейчас. – ormurin

Смежные вопросы