que programa pedir lea hora funciones fecha ejemplos como calcular c++ date c++11 time chrono

programa - time c++



Salida de fecha y hora en C++ usando std:: chrono (3)

He estado actualizando algunos códigos antiguos y he intentado actualizar a C ++ 11 siempre que sea posible. El siguiente código es como solía mostrar la hora y la fecha en mi programa

#include <iostream> #include <string> #include <stdio.h> #include <time.h> const std::string return_current_time_and_date() const { time_t now = time(0); struct tm tstruct; char buf[80]; tstruct = *localtime(&now); strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct); return buf; }

Me gustaría dar salida a la hora y fecha actual en un formato similar usando std :: chrono (o similar) pero no estoy seguro de cómo hacerlo. Cualquier ayuda sería muy apreciada. Gracias


La biblioteca <chrono> solo trata el tiempo y no las fechas, excepto el system_clock que tiene la capacidad de convertir sus puntos de tiempo a time_t . Así que usar <chrono> para las fechas no mejorará mucho las cosas. Con suerte, obtendremos algo así como chrono::date en un futuro no muy lejano.

Dicho esto, puede usar <chrono> de la siguiente manera:

#include <chrono> // chrono::system_clock #include <ctime> // localtime #include <sstream> // stringstream #include <iomanip> // put_time #include <string> // string std::string return_current_time_and_date() { auto now = std::chrono::system_clock::now(); auto in_time_t = std::chrono::system_clock::to_time_t(now); std::stringstream ss; ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X"); return ss.str(); }

Tenga en cuenta que std::localtime puede causar carreras de datos. localtime_r o funciones similares pueden estar disponibles en sus plataformas.

Actualizar:

Usando una nueva versión de la chrono::date de Howard Hinnant, puede escribir:

#include "date.h" #include <chrono> #include <string> #include <sstream> std::string return_current_time_and_date() { auto now = std::chrono::system_clock::now(); auto today = date::floor<days>(now); std::stringstream ss; ss << today << '' '' << date::make_time(now - today) << " UTC"; return ss.str(); }

Esto imprimirá algo así como "2015-07-24 05: 15: 34.043473124 UTC".

En una nota no relacionada, devolver objetos const se ha vuelto indeseable con C ++ 11; los valores de retorno const no se pueden mover. También eliminé el const final porque el const final solo es válido para funciones miembro y esta función no necesita ser miembro.


Las soluciones bames53 son buenas, pero no compilan en mi VS2017. La solución con ctime no se compila porque el tiempo local está muy obsoleto. El que tiene date.h no compila con la fecha actual.h Acabo de quitar github aunque la documentación dice que deberían, porque hoy no se puede transmitir como está. Omití los includes pero aquí hay un código que funciona:

void TimeTest() { auto n = std::chrono::system_clock::now(); auto in_time_t = std::chrono::system_clock::to_time_t(n); std::tm buf; localtime_s(&buf, &in_time_t); std::cout << std::put_time(&buf, "%Y-%m-%d %X") << std::endl; } // I just added date.h from this link''s guthub to the project. // https://howardhinnant.github.io/date/date.html void TimeTest1() { auto now = std::chrono::system_clock::now(); auto today = floor<date::days>(std::chrono::system_clock::now()); std::cout << date::year_month_day{ today } << '' '' << date::make_time(now - today) << std::endl; } // output is // 2018-04-08 21:19:49 // 2018-04-08 18:19:49.8408289

No dude en solucionar la solución bames53 y eliminar la mía. Mi texto simplemente no cabe en un comentario. Estoy seguro de que puede salvar a muchas personas de la pena.


Puede mejorar la respuesta de @ bames53 utilizando Boost lexical_cast en lugar de manipulaciones de secuencia de cadenas.

Esto es lo que hago:

#include <boost/lexical_cast.hpp> #include <ctime> std::string return_current_time_and_date() { auto current_time = std::time(0); return boost::lexical_cast<std::string>(std::put_time(std::gmtime(& current_time), "%Y-%m-%d %X")); }