Namespaces
Variants

std::chrono:: time_point

From cppreference.net
Definido en el encabezado <chrono>
template <

class Clock,
class Duration = typename Clock :: duration

> class time_point ;
(desde C++11)

La plantilla de clase std::chrono::time_point representa un punto en el tiempo. Se implementa como si almacenara un valor de tipo Duration que indica el intervalo de tiempo desde el inicio de la época del Clock .

Clock debe cumplir con los requisitos para Clock o ser std::chrono::local_t (desde C++20) .

(hasta C++23)

Contenidos

Tipos de miembros

Tipo Descripción
Clock clock
el reloj en el que se mide este punto temporal
(typedef)
Duration duration
un tipo std::chrono::duration utilizado para medir el tiempo desde el epoch
(typedef)
duration::rep rep
un tipo aritmético que representa el número de ticks de la duración
(typedef)
duration::period period
un tipo std::ratio que representa el período de tick de la duración
(typedef)

Funciones miembro

construye un nuevo time point
(función miembro pública)
devuelve el time point como duración desde el inicio de su reloj
(función miembro pública)
modifica el time point por la duración dada
(función miembro pública)
incrementa o decrementa la duración
(función miembro pública)
[static]
devuelve el time point correspondiente a la duración más pequeña
(función miembro estática pública)
[static]
devuelve el time point correspondiente a la duración más grande
(función miembro estática pública)

Funciones no miembro

realiza operaciones de suma y resta que involucran un time point
(plantilla de función)
(C++11) (C++11) (eliminado en C++20) (C++11) (C++11) (C++11) (C++11) (C++20)
compara dos time points
(plantilla de función)
convierte un time point a otro time point en el mismo reloj, con una duración diferente
(plantilla de función)
convierte un time_point a otro, redondeando hacia abajo
(plantilla de función)
convierte un time_point a otro, redondeando hacia arriba
(plantilla de función)
convierte un time_point a otro, redondeando al más cercano, empates al par
(plantilla de función)

Clases auxiliares

especializa el rasgo std::common_type
(especialización de plantilla de clase)
soporte de hash para std::chrono::time_point
(especialización de plantilla de clase)

Ejemplo

#include <algorithm>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
void slow_motion()
{
    static int a[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    // Generar Γ(13) == 12! permutaciones:
    while (std::ranges::next_permutation(a).found) {}
}
int main()
{
    using namespace std::literals; // habilita sufijos literales, ej. 24h, 1ms, 1s.
    const std::chrono::time_point<std::chrono::system_clock> now =
        std::chrono::system_clock::now();
    const std::time_t t_c = std::chrono::system_clock::to_time_t(now - 24h);
    std::cout << "Hace 24 horas, la hora era "
              << std::put_time(std::localtime(&t_c), "%F %T.\n") << std::flush;
    const std::chrono::time_point<std::chrono::steady_clock> start =
        std::chrono::steady_clock::now();
    std::cout << "Los diferentes relojes no son comparables: \n"
                 "  Tiempo del sistema: " << now.time_since_epoch() << "\n"
                 "  Tiempo estable: " << start.time_since_epoch() << '\n';
    slow_motion();
    const auto end = std::chrono::steady_clock::now();
    std::cout
        << "Los cálculos lentos tomaron "
        << std::chrono::duration_cast<std::chrono::microseconds>(end - start) << " ≈ "
        << (end - start) / 1ms << "ms ≈ " // forma casi equivalente de lo anterior, pero
        << (end - start) / 1s << "s.\n";  // usando milisegundos y segundos respectivamente
}

Salida posible:

Hace 24 horas, la hora era 2021-02-15 18:28:52.
Los diferentes relojes no son comparables:
  Tiempo del sistema: 1666497022681282572ns
  Tiempo estable: 413668317434475ns
Los cálculos lentos tomaron 2090448µs ≈ 2090ms ≈ 2s.

Véase también

(C++11)
un intervalo de tiempo
(plantilla de clase)
representa un year , month , y day específicos
(clase)