Date and time library
C++ incluye soporte para dos tipos de manipulación del tiempo:
- La biblioteca chrono , una colección flexible de tipos que rastrean el tiempo con distintos grados de precisión (por ejemplo, std::chrono::time_point ).
- Biblioteca de fecha y hora estilo C (por ejemplo, std::time ).
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
|
|
|
(C++11)
|
hora de reloj de pared del reloj en tiempo real de todo el sistema
(clase) |
|
(C++11)
|
reloj monótono que nunca será ajustado
(clase) |
|
(C++11)
|
el reloj con el período de tic más corto disponible
(clase) |
|
(C++20)
|
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) |
|
(C++20)
|
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) |
|
(C++20)
|
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) |
|
(C++20)
|
representa el n
th
weekday
de un mes
(clase) |
|
(C++20)
|
representa el último
weekday
de un mes
(clase) |
|
(C++20)
|
representa un
day
específico de un
month
específico
(clase) |
|
(C++20)
|
representa el último día de un
month
específico
(clase) |
|
(C++20)
|
representa el n
th
weekday
de un
month
específico
(clase) |
|
(C++20)
|
representa el último
weekday
de un
month
específico
(clase) |
|
(C++20)
|
representa un
month
específico de un
year
específico
(clase) |
|
(C++20)
|
representa un
year
,
month
y
day
específicos
(clase) |
|
(C++20)
|
representa el último día de un
year
y
month
específicos
(clase) |
|
(C++20)
|
representa el n
th
weekday
de un
year
y
month
específicos
(clase) |
|
(C++20)
|
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) |
|
|
(C++20)
|
localiza una
time_zone
basándose en su nombre
(función) |
|
(C++20)
|
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) |
|
(C++20)
|
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) |
|
(C++20)
|
contiene información sobre una inserción de segundo intercalar
(clase) |
|
(C++20)
|
información de inserción de segundo intercalar
(clase) |
|
(C++20)
|
obtiene información de inserción de segundo intercalar de un objeto
utc_time
(plantilla de función) |
|
(C++20)
|
representa un nombre alternativo para una zona horaria
(clase) |
|
(C++20)
|
excepción lanzada para informar que una hora local no existe
(clase) |
|
(C++20)
|
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
|
|
|
(C++20)
|
un literal
std::chrono::year
que representa un año específico
(función) |
|
(C++20)
|
un literal
std::chrono::day
que representa un día del mes
(función) |
|
(C++14)
|
un literal
std::chrono::duration
que representa horas
(función) |
|
(C++14)
|
un literal
std::chrono::duration
que representa minutos
(función) |
|
(C++14)
|
un literal
std::chrono::duration
que representa segundos
(función) |
|
(C++14)
|
un literal
std::chrono::duration
que representa milisegundos
(función) |
|
(C++14)
|
un literal
std::chrono::duration
que representa microsegundos
(función) |
|
(C++14)
|
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