Текущая дата и время в виде строки
Я написал функцию, чтобы получить текущую дату и время в формате: 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;
}
6 ответов:
не C++11 решение: с
<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 %H:%M:%S",timeinfo); std::string str(buffer); std::cout << str; return 0; }
С C++11 вы можете использовать
std::put_time
Сiomanip
:#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
является потоковым манипулятором, поэтому его можно использовать вместе сstd::ostringstream
чтобы преобразовать дату в строку:#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; }
вы можете использовать функцию времени asctime ().H, чтобы получить строку просто .
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++ в MS Visual Studio 2015 (14), я использую:
#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; }
Я хотел использовать ответ C++11, но я не мог, потому что GCC 4.9 не поддерживает std::put_time.
std:: put_time состояние реализации в GCC?
Я закончил тем, что использовал некоторые C++11, чтобы немного улучшить ответ, отличный от C++11. Для тех, кто не может использовать GCC 5, но все равно хотел бы использовать C++11 в своем формате даты / времени:
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());