Trabajo con fechas y horas en C++: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas y horas en C++: desde lo clásico hasta el estándar moderno



La gestión de fechas y horas es una de las tareas clave en el desarrollo de software. Ya sea para registro de eventos, cálculo de plazos, trabajo con temporizadores o análisis de datos — no se puede prescindir de un conjunto de herramientas fiable. En C++ existen varios enfoques para esto: desde la biblioteca clásica <ctime> hasta la moderna <chrono>, que apareció en C++11 y se amplió significativamente en C++20. En este artículo analizaremos los métodos principales para trabajar con fechas y horas, proporcionaremos ejemplos prácticos y mostraremos cómo evitar errores típicos.



1. Enfoque clásico: la biblioteca <ctime>



La biblioteca <ctime> llegó a C++ desde el lenguaje C. Proporciona herramientas simples pero limitadas para trabajar con el tiempo calendario. Los tipos principales son: std::time_t (un número entero de segundos desde el 1 de enero de 1970) y std::tm (una estructura con campos de año, mes, día, horas, minutos, segundos, etc.).



Ejemplo 1: Obtener la hora actual y formatearla



#include <iostream>#include <ctime>

int main() { // Obtenemos la hora actual std::time_t now = std::time(nullptr); // Convertimos a hora local std::tm* local = std::localtime(&now); // Mostramos en formato "AAAA-MM-DD HH:MM:SS" char buffer[80]; std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local); std::cout << "Hora actual: " << buffer << std::endl; return 0;}


Funciones principales de <ctime>:

  • std::time() — devuelve la hora calendario actual.
  • std::localtime() — convierte time_t en una estructura tm que representa la hora local.
  • std::gmtime() — lo mismo, pero para UTC (Tiempo Universal Coordinado).
  • std::mktime() — conversión inversa: de tm a time_t.
  • std::difftime() — calcula la diferencia en segundos entre dos momentos en el tiempo.
  • std::strftime() — formatea la fecha y hora en una cadena según una plantilla dada.


Desventajas: la biblioteca no tiene en cuenta las zonas horarias (excepto local y UTC), no admite alta precisión (solo segundos), y la estructura tm no es segura en cuanto a tipos (por ejemplo, el año se cuenta desde 1900, el mes de 0 a 11).



2. Estándar moderno: la biblioteca <chrono> (C++11 y posteriores)



A partir de C++11, se agregó a la biblioteca estándar <chrono> — una biblioteca segura en cuanto a tipos y de alta precisión para trabajar con el tiempo. Opera con tres conceptos principales: duración (duration), punto en el tiempo (time_point) y reloj (clock).



Tipos de reloj:

  • std::chrono::system_clock — tiempo del sistema, vinculado al calendario (se puede convertir a time_t).
  • std::chrono::steady_clock — reloj monótono, ideal para medir intervalos (no está sujeto a ajustes).
  • std::chrono::high_resolution_clock — reloj con la máxima resolución disponible (a menudo es sinónimo de steady_clock).


Ejemplo 2: Medición del tiempo de ejecución de una operación



#include <iostream>#include <chrono>#include <thread>

int main() { // Marcamos el inicio auto start = std::chrono::steady_clock::now(); // Simulación de trabajo std::this_thread::sleep_for(std::chrono::milliseconds(500)); // Marcamos el final auto end = std::chrono::steady_clock::now(); // Calculamos la diferencia auto duration = end - start;

Blogs

Book Recommendations