Ошибка при создании строки, содержащей time_t?

Я пытаюсь создать строку с текущим временем и датой

time_t t = time(NULL); //get time passed since UNIX epoc
struct tm *currentTime = localtime(&t);
string rightNow = (currentTime->tm_year + 1900) + '-'
     + (currentTime->tm_mon + 1) + '-'
     +  currentTime->tm_mday + ' '
     +  currentTime->tm_hour + ':'
     +  currentTime->tm_min + ':'
     +  currentTime->tm_sec;

я получаю ошибку

инициализация аргумента 1 из 'std::basic_string‹_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [с _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'|

Я беспокоюсь о том, что первый «+» используется в строке (поскольку он может обозначать конкатенацию), тот факт, что он находится в скобках, означает сложение? Хотя я думаю, что проблема в другой строке, так как компилятор выдает ошибку в последней строке, которую я дал.


person Celeritas    schedule 27.08.2012    source источник


Ответы (1)


В C++ нельзя объединять числа, символы и строки с помощью оператора +. Чтобы объединить строки таким образом, рассмотрите возможность использования stringstream:

time_t t = time(NULL); //get time passed since UNIX epoc
struct tm *currentTime = localtime(&t);
ostringstream builder;
builder << (currentTime->tm_year + 1900) << '-'
 << (currentTime->tm_mon + 1) << '-'
 <<  currentTime->tm_mday << ' '
 <<  currentTime->tm_hour << ':'
 <<  currentTime->tm_min << ':'
 <<  currentTime->tm_sec;
string rightNow = builder.str();

В качестве альтернативы рассмотрите возможность использования библиотеки Boost.Format, которая немного лучше синтаксис.

Надеюсь это поможет!

person templatetypedef    schedule 27.08.2012