创建包含time_t的字符串时出错?

时间:2012-08-27 20:23:51

标签: c++ string string-concatenation

我正在尝试使用当前时间和日期创建一个字符串

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;

我收到错误

  

初始化'std :: basic_string< _CharT,_Traits的参数1,   _Alloc> :: basic_string(const _CharT *,const _Alloc&)[with _CharT = char,_Traits = std :: char_traits,_Alloc =   的std ::分配器]'|

我担心字符串中使用的第一个'+'(因为它可能表示连接)是它在括号中是否意味着添加?虽然我认为问题是在另一行,因为编译器在我给出的最后一行给出错误。

1 个答案:

答案 0 :(得分:9)

在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库,它具有稍微好一点的语法。

希望这有帮助!