Puntos temporales
Represente momentos en el tiempo
Puntos temporales es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué es un punto temporal?
Un std::chrono::time_point representa un momento concreto medido desde la época de un reloj. Asocia un reloj con una duración desde esa época.
- Lo devuelve
clock::now(). - Al restar dos puntos temporales se obtiene una duración.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
time_point<steady_clock> tp = steady_clock::now();
std::cout << "Captured a moment: " << (tp.time_since_epoch().count() != 0) << '\n';
return 0;
}time_since_epoch
Cada punto temporal puede indicar su distancia desde la época del reloj mediante time_since_epoch(), que devuelve una duración.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
auto d = tp.time_since_epoch();
auto s = duration_cast<seconds>(d);
std::cout << "Positive epoch seconds: " << (s.count() > 0) << '\n';
return 0;
}Restar puntos temporales
Restar un punto temporal de otro produce una duración, es decir, el tiempo transcurrido entre ambos momentos.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto a = steady_clock::now();
auto b = steady_clock::now();
auto diff = b - a;
std::cout << "Elapsed ns is non-negative: " << (diff.count() >= 0) << '\n';
return 0;
}Añadir una duración
Al añadir una duración a un punto temporal se obtiene un nuevo punto temporal en el futuro (o en el pasado si se resta). Así se calculan las fechas límite.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
using namespace std::chrono_literals;
auto now = steady_clock::now();
auto deadline = now + 10s;
std::cout << "Deadline is after now: " << std::boolalpha << (deadline > now) << '\n';
return 0;
}Comparar puntos temporales
Los puntos temporales del mismo reloj admiten todos los operadores de comparación, lo que permite comprobar si un momento es anterior o posterior a otro.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto first = steady_clock::now();
auto second = steady_clock::now();
std::cout << std::boolalpha << (first <= second) << '\n';
return 0;
}Puntos temporales específicos del reloj
Un punto temporal está vinculado al tipo de su reloj. No puede comparar directamente un punto temporal de system_clock con uno de steady_clock porque sus épocas son diferentes.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
system_clock::time_point sys = system_clock::now();
steady_clock::time_point mono = steady_clock::now();
std::cout << "Both captured: " << ((sys.time_since_epoch().count() != 0) && (mono.time_since_epoch().count() != 0)) << '\n';
return 0;
}Convertir a time_t
system_clock::to_time_t convierte un punto temporal del calendario en un time_t de estilo C que puede formatear para mostrarlo a las personas.
#include <iostream>
#include <chrono>
#include <ctime>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
std::time_t t = system_clock::to_time_t(tp);
std::cout << "time_t is positive: " << (t > 0) << '\n';
return 0;
}from_time_t
La operación inversa, system_clock::from_time_t, construye un punto temporal a partir de un valor time_t, como una marca de tiempo almacenada.
#include <iostream>
#include <chrono>
#include <ctime>
int main() {
using namespace std::chrono;
std::time_t t = 1000000000;
auto tp = system_clock::from_time_t(t);
auto back = system_clock::to_time_t(tp);
std::cout << "Round trip ok: " << std::boolalpha << (back == t) << '\n';
return 0;
}Calcular una fecha límite
Un patrón habitual consiste en capturar now(), añadir una duración de tiempo de espera y, más tarde, comparar con un now() nuevo para comprobar si se ha superado la fecha límite.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
using namespace std::chrono_literals;
auto deadline = steady_clock::now() + 0ms;
auto current = steady_clock::now();
bool expired = current >= deadline;
std::cout << "Expired: " << std::boolalpha << expired << '\n';
return 0;
}Precisión de los puntos temporales
La precisión de un punto temporal coincide con el tipo de duración de su reloj. Puede convertir un punto temporal a una unidad menos precisa mediante time_point_cast.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
auto secs_tp = time_point_cast<seconds>(tp);
std::cout << "Cast preserved sign: " << (secs_tp.time_since_epoch().count() > 0) << '\n';
return 0;
}Almacenar marcas de tiempo
Para conservar un momento, conviértalo en un número de segundos desde la época, almacene el entero y reconstruya después el punto temporal cuando lo necesite.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
long long stored = duration_cast<seconds>(tp.time_since_epoch()).count();
std::cout << "Stored value usable: " << (stored > 0) << '\n';
return 0;
}Comprobación rápida
Compruebe su comprensión de la aritmética de los puntos temporales.
Repaso
Ha aprendido que un time_point:
- marca un momento concreto con respecto a la época de un reloj
- indica su desplazamiento mediante
time_since_epoch() - admite sumar y restar duraciones, además de realizar comparaciones
- se convierte a y desde
time_tpara mostrarlo y almacenarlo
A continuación, utilizará estas herramientas para evaluar y medir el rendimiento del código.
Preguntas frecuentes
¿La lección «Puntos temporales» es gratis?
Sí — el texto completo de «Puntos temporales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Puntos temporales»?
Represente momentos en el tiempo Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Puntos temporales»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.