当前date和时间作为string

我写了一个函数获取当前的date和时间格式: DD-MM-YYYY HH:MM:SS 。 它的作品,但让我们说,它的相当丑陋。 我怎样才能做到完全一样的事情,但更简单?

 string currentDateToString() { time_t now = time(0); tm *ltm = localtime(&now); string dateString = "", tmp = ""; tmp = numToString(ltm->tm_mday); if (tmp.length() == 1) tmp.insert(0, "0"); dateString += tmp; dateString += "-"; tmp = numToString(1 + ltm->tm_mon); if (tmp.length() == 1) tmp.insert(0, "0"); dateString += tmp; dateString += "-"; tmp = numToString(1900 + ltm->tm_year); dateString += tmp; dateString += " "; tmp = numToString(ltm->tm_hour); if (tmp.length() == 1) tmp.insert(0, "0"); dateString += tmp; dateString += ":"; tmp = numToString(1 + ltm->tm_min); if (tmp.length() == 1) tmp.insert(0, "0"); dateString += tmp; dateString += ":"; tmp = numToString(1 + ltm->tm_sec); if (tmp.length() == 1) tmp.insert(0, "0"); dateString += tmp; return dateString; } 

非C ++ 11解决scheme:使用<ctime>头,您可以使用strftime 。 确保你的缓冲区足够大,你不想超过它,并在以后的破坏。

 #include <iostream> #include <ctime> int main () { time_t rawtime; struct tm * timeinfo; char buffer[80]; time (&rawtime); timeinfo = localtime(&rawtime); strftime(buffer,sizeof(buffer),"%d-%m-%Y %I:%M:%S",timeinfo); std::string str(buffer); std::cout << str; return 0; } 

从C ++ 11开始,你可以使用iomanip头文件中的std::put_time

 #include <iostream> #include <iomanip> #include <ctime> int main() { auto t = std::time(nullptr); auto tm = *std::localtime(&t); std::cout << std::put_time(&tm, "%d-%m-%Y %H-%M-%S") << std::endl; } 

std::put_time是一个stream操作器,因此它可以与std::ostringstream一起使用,以便将date转换为string:

 #include <iostream> #include <iomanip> #include <ctime> #include <sstream> int main() { auto t = std::time(nullptr); auto tm = *std::localtime(&t); std::ostringstream oss; oss << std::put_time(&tm, "%d-%m-%Y %H-%M-%S"); auto str = oss.str(); std::cout << str << std::endl; } 

你可以使用time.h的asctime()函数简单地得到一个string。

 time_t _tm =time(NULL ); struct tm * curtime = localtime ( &_tm ); cout<<"The current date/time is:"<<asctime(curtime); 

示例输出:

 The current date/time is:Fri Oct 16 13:37:30 2015 

我想使用C ++ 11的答案,但我不能,因为GCC 4.9不支持std :: put_time。

在GCC的std :: put_time实现状态?

我最终使用了一些C ++ 11来略微改进非C ++ 11的答案。 对于那些不能使用GCC 5,但仍然喜欢一些C + + 11的date/时间格式:

  std::array<char, 64> buffer; buffer.fill(0); time_t rawtime; time(&rawtime); const auto timeinfo = localtime(&rawtime); strftime(buffer.data(), sizeof(buffer), "%d-%m-%Y %H-%M-%S", timeinfo); std::string timeStr(buffer.data()); 

在MS Visual Studio 2015(14)中使用C ++,我使用:

 #include <chrono> string NowToString() { chrono::system_clock::time_point p = chrono::system_clock::now(); time_t t = chrono::system_clock::to_time_t(p); char str[26]; ctime_s(str, sizeof str, &t); return str; }