Namespaces
Variants

Date and time library

From cppreference.net

C++ incluye soporte para dos tipos de manipulación del tiempo:

Contenidos

Biblioteca Chrono (desde C++11)

La chrono library define varios tipos principales así como funciones de utilidad y typedefs comunes:

(since C++20)

Relojes

Un reloj consiste en un punto de inicio (o época) y una frecuencia de tic. Por ejemplo, un reloj puede tener una época del 1 de enero de 1970 y tictaquear cada segundo. C++ define varios tipos de reloj:

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
hora de reloj de pared del reloj en tiempo real de todo el sistema
(clase)
reloj monótono que nunca será ajustado
(clase)
el reloj con el período de tic más corto disponible
(clase)
determina si un tipo es un Clock
(plantilla de clase) (plantilla de variable)
(C++20)
Clock para Tiempo Universal Coordinado (UTC)
(clase)
(C++20)
Clock para Tiempo Atómico Internacional (TAI)
(clase)
(C++20)
Clock para tiempo GPS
(clase)
(C++20)
Clock utilizado para tiempo de archivo
(typedef)
(C++20)
pseudo-reloj que representa la hora local
(clase)

Punto temporal

Un punto temporal es una duración de tiempo que ha transcurrido desde el epoch de un reloj específico.

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++11)
un punto en el tiempo
(plantilla de clase)
clase de rasgos que define cómo convertir puntos de tiempo de un reloj a otro
(plantilla de clase)
(C++20)
convertir puntos de tiempo de un reloj a otro
(plantilla de función)

Duración

Una duración consiste en un lapso de tiempo, definido como cierto número de ticks de alguna unidad de tiempo. Por ejemplo, "42 segundos" podría representarse mediante una duración que consta de 42 ticks de una unidad de tiempo de 1 segundo.

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++11)
un intervalo de tiempo
(plantilla de clase)

Hora del día (desde C++20)

hh_mm_ss divide una duración que representa el tiempo transcurrido desde la medianoche en horas, minutos, segundos y fracciones de segundo, según corresponda. Es principalmente una herramienta de formato.

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++20)
representa una hora del día
(plantilla de clase)
traduce entre un formato de hora del día de 12h/24h
(función)

Calendario (desde C++20)

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++20)
clase etiqueta que indica el último día o día de la semana en un mes
(clase)
(C++20)
representa un día de un mes
(clase)
(C++20)
representa un mes del año
(clase)
(C++20)
representa un año en el calendario gregoriano
(clase)
(C++20)
representa un día de la semana en el calendario gregoriano
(clase)
representa el n th weekday de un mes
(clase)
representa el último weekday de un mes
(clase)
(C++20)
representa un day específico de un month específico
(clase)
representa el último día de un month específico
(clase)
representa el n th weekday de un month específico
(clase)
representa el último weekday de un month específico
(clase)
(C++20)
representa un month específico de un year específico
(clase)
representa un year , month y day específicos
(clase)
representa el último día de un year y month específicos
(clase)
representa el n th weekday de un year y month específicos
(clase)
representa el último weekday de un year y month específicos
(clase)
(C++20)
sintaxis convencional para la creación de fechas del calendario gregoriano
(función)

Zona horaria (desde C++20)

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++20)
describe una copia de la base de datos de zonas horarias IANA
(clase)
(C++20)
representa una lista enlazada de tzdb
(clase)
accede y controla la información global de la base de datos de zonas horarias
(función)
localiza una time_zone basándose en su nombre
(función)
devuelve la time_zone actual
(función)
(C++20)
representa una zona horaria
(clase)
(C++20)
representa información sobre una zona horaria en un punto temporal específico
(clase)
(C++20)
representa información sobre una conversión de hora local a hora UNIX
(clase)
(C++20)
selecciona cómo debe resolverse una hora local ambigua
(enumeración)
clase de rasgos para punteros de zona horaria utilizados por zoned_time
(plantilla de clase)
(C++20)
representa una zona horaria y un punto temporal
(clase)
contiene información sobre una inserción de segundo intercalar
(clase)
información de inserción de segundo intercalar
(clase)
obtiene información de inserción de segundo intercalar de un objeto utc_time
(plantilla de función)
representa un nombre alternativo para una zona horaria
(clase)
excepción lanzada para informar que una hora local no existe
(clase)
excepción lanzada para informar que una hora local es ambigua
(clase)

Literales (desde C++14)

Definido en el encabezado <chrono>
Definido en el espacio de nombres en línea std::literals::chrono_literals
un literal std::chrono::year que representa un año específico
(función)
un literal std::chrono::day que representa un día del mes
(función)
un literal std::chrono::duration que representa horas
(función)
un literal std::chrono::duration que representa minutos
(función)
un literal std::chrono::duration que representa segundos
(función)
un literal std::chrono::duration que representa milisegundos
(función)
un literal std::chrono::duration que representa microsegundos
(función)
un literal std::chrono::duration que representa nanosegundos
(función)

E/S de Chrono (desde C++20)

Definido en el encabezado <chrono>
Definido en el espacio de nombres std::chrono
(C++20)
analiza un objeto chrono desde un flujo
(plantilla de función)

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_chrono 201510L (C++17) Funciones de redondeo para std::chrono::duration y std::chrono::time_point
201611L (C++17) constexpr para todas las funciones miembro de std::chrono::duration y std::chrono::time_point
201907L (C++20) Calendarios y Zonas horarias
202306L (C++26) Soporte de hashing para las clases de valor de std::chrono

Biblioteca de fecha y hora estilo C

También se proporcionan las funciones de fecha y hora estilo C, como std::time_t , std::difftime , y CLOCKS_PER_SEC .

Ejemplo

#include <chrono>
#include <iostream>
long Fibonacci(unsigned n)
{
    return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);
}
int main()
{
    // Mide y muestra el tiempo de ejecución de una llamada a función.
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{Fibonacci(42)};
    const auto finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{finish - start};
    std::cout << "Fibonacci(42): " << fb << "\nElapsed time: ";
//  std::cout << elapsed_seconds.count() << "s\n"; // Antes de C++20
    std::cout << elapsed_seconds << '\n'; // Operador << de chrono::duration en C++20
    // Imprime la hora UTC y local.
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "Current time 'UTC' is: " << tp_utc << "\n"
                 "Current time 'Local' is: "
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

Salida posible:

Fibonacci(42): 267914296
Elapsed time: 0.728532s
Current time 'UTC' is: 2025-02-10 06:22:39.420666960
Current time 'Local' is: 2025-02-10 09:22:39.420666960