unidos mexico los hora exacta estados espaƱa colombia china california brasil angeles c++ string date datetime time

c++ - mexico - Fecha y hora actual como cadena



hora en mexico (5)

Desde C ++ 11 puedes usar std::put_time desde el encabezado 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 es un manipulador de flujo, por lo tanto, podría usarse junto con std::ostringstream para convertir la fecha en una cadena:

#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; }

Escribí una función para obtener una fecha y hora actual en formato: DD-MM-YYYY HH:MM:SS . Funciona, pero digamos, es bastante feo. ¿Cómo puedo hacer exactamente lo mismo pero más simple?

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; }


Quería usar la respuesta C ++ 11, pero no pude porque GCC 4.9 no es compatible con std :: put_time.

std :: put_time estado de implementación en GCC?

Terminé usando C ++ 11 para mejorar ligeramente la respuesta que no es C ++ 11. Para aquellos que no pueden usar GCC 5, pero aún les gustaría algunos C ++ 11 en su formato de fecha / hora:

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());


Solución no C ++ 11: con el encabezado <ctime> , puede usar strftime . Asegúrate de que tu memoria intermedia sea lo suficientemente grande, no desees invadirla y causar estragos más adelante.

#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; }


Usando C ++ en MS Visual Studio 2015 (14), utilizo:

#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; }


puede usar la función asctime () de time.h para obtener una cadena de forma simple.

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

Muestra de salida:

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