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

Error creating a string containing a time_t?

本文关键字:字符串 出错 包含 time 创建      更新时间:2023-10-16

我正在尝试创建一个具有当前时间和日期的字符串

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&lt_CharT,_Traits,_Alloc>::basic_string(const_CharT*,const_Alloc&)[其中_CharT=char,_Traits=std::char_Traits,_Alloc=std::分配器]'|

我担心字符串中使用的第一个"+"(因为它可能表示串联)是因为它在括号中,这意味着加法吗?尽管我认为问题出在另一行,因为编译器在我给出的最后一行给出了错误。

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

希望这能有所帮助!