C++:
Convirtiendo una fecha en una cadena de texto
Cómo hacerlo:
Podemos usar la biblioteca <chrono>
de C++ y la clase std::ostringstream
junto con <iomanip>
para formatear fechas.
#include <iostream>
#include <iomanip>
#include <sstream>
#include <chrono>
#include <ctime>
int main() {
// Obtener la fecha actual como un objeto time_point
auto now = std::chrono::system_clock::now();
// Convertir a tiempo de sistema y luego a tm para formatear
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::tm now_tm = *std::localtime(&now_c);
// Usar stringstream para formatear la fecha
std::ostringstream date_stream;
date_stream << std::put_time(&now_tm, "%d-%m-%Y %H:%M:%S");
// Convertir a string
std::string date_str = date_stream.str();
// Mostrar la fecha formateada
std::cout << "Fecha actual: " << date_str << std::endl;
return 0;
}
Salida de muestra:
Fecha actual: 24-03-2023 14:45:12
Profundización:
En la era pre-C++11, las fechas eran manipuladas con las funciones y estructuras de C como time_t
y tm
. Con el estándar C++11, llegó <chrono>
para manejar tiempo con mayor precisión y simplicidad. Sin embargo, la conversión a string seguía dependiendo de <ctime>
hasta que C++20 introdujo std::format
, que simplifica la tarea pero aún no es soportado universalmente.
Alternativas como la biblioteca Boost.Date_Time tienen más funcionalidades pero aumentan la complejidad y el tamaño del proyecto. Finalmente, la zona horaria y la localización impactan cómo se formatea una fecha, teniendo que elegir entre UTC, tiempo local y considerar el idioma del usuario final.
Ver También:
- C++ Reference para
<chrono>
: https://en.cppreference.com/w/cpp/header/chrono - C++ Reference para
std::put_time
: https://en.cppreference.com/w/cpp/io/manip/put_time - Propuesta para
std::format
: https://en.cppreference.com/w/cpp/utility/format/format - Documentación de Boost.Date_Time: https://www.boost.org/doc/libs/release/libs/date_time/