0Pricing
C++ Academy · Lección

Calendario y zonas horarias

Use los tipos de calendario de C++20

Calendario y zonas horarias es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 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.

Tipos de calendario de C++20

C++20 añadió una compatibilidad completa con calendarios a <chrono>. Ahora puede expresar directamente años, meses y días mediante tipos, en lugar de manipular números enteros.

  • year, month, day
  • year_month_day para representar una fecha completa
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year y{2026};
    std::cout << "Year value: " << static_cast<int>(y) << '\n';
    return 0;
}

Literales de calendario

Los literales de calendario, como 2026y y 15d, junto con meses con nombre como std::chrono::May, hacen que las fechas resulten naturales de leer.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto y = 2026y;
    auto d = 15d;
    std::cout << static_cast<int>(y) << " / " << static_cast<unsigned>(d) << '\n';
    return 0;
}

Construcción de una fecha

Combine las tres partes con el operador / para formar un year_month_day. El orden es año, mes y día.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day ymd = 2026y/May/30;
    std::cout << static_cast<int>(ymd.year()) << "-"
              << static_cast<unsigned>(ymd.month()) << "-"
              << static_cast<unsigned>(ymd.day()) << '\n';
    return 0;
}

Validación de fechas

Un year_month_day sabe si representa una fecha real del calendario. Use ok() para rechazar valores imposibles, como el 30 de febrero.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day good = 2026y/February/28;
    year_month_day bad = 2026y/February/30;
    std::cout << std::boolalpha << good.ok() << " " << bad.ok() << '\n';
    return 0;
}

sys_days

Convierta una fecha a sys_days, que representa un número de días desde la época. Esto permite realizar operaciones con días y calcular diferencias entre fechas.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    sys_days a = sys_days{2026y/May/30};
    sys_days b = sys_days{2026y/May/20};
    std::cout << "Days apart: " << (a - b).count() << '\n';
    return 0;
}

Operaciones con días

Al sumar days{n} a un sys_days, avanza n días; después puede volver a convertir el resultado en una fecha de calendario.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    sys_days start = sys_days{2026y/May/30};
    sys_days later = start + days{10};
    year_month_day ymd = later;
    std::cout << static_cast<unsigned>(ymd.day()) << "/"
              << static_cast<unsigned>(ymd.month()) << '\n';
    return 0;
}

Día de la semana

Convierta un sys_days en un weekday para averiguar en qué día de la semana cae una fecha.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    weekday wd{sys_days{2026y/May/30}};
    std::cout << "Weekday index (Sun=0): " << wd.c_encoding() << '\n';
    return 0;
}

Último día de un mes

La etiqueta especial last calcula el último día de cualquier mes y gestiona automáticamente los años bisiestos.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day_last eom = 2024y/February/last;
    year_month_day ymd = eom;
    std::cout << "Feb 2024 ends on day " << static_cast<unsigned>(ymd.day()) << '\n';
    return 0;
}

Comprobación de año bisiesto

El tipo year proporciona is_leap(), por lo que no tiene que recordar las reglas de divisibilidad.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    std::cout << std::boolalpha;
    std::cout << "2024 leap: " << year{2024}.is_leap() << '\n';
    std::cout << "2026 leap: " << year{2026}.is_leap() << '\n';
    return 0;
}

De un punto temporal a una fecha

Aplique floor a un punto temporal de system_clock para obtener days y conviértalo en un year_month_day para obtener la fecha de hoy.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto today = floor<days>(system_clock::now());
    year_month_day ymd = sys_days{today};
    std::cout << "Year is in range: " << (static_cast<int>(ymd.year()) > 2000) << '\n';
    return 0;
}

Zonas horarias

C++20 también añade zonas horarias mediante std::chrono::zoned_time y la base de datos de IANA. La disponibilidad depende de su biblioteca estándar, pero este modelo combina un punto temporal con una zona con nombre para mostrar correctamente la hora local.

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto now = system_clock::now();
    auto days_part = floor<days>(now);
    std::cout << "Have a UTC time point: " << (days_part.time_since_epoch().count() > 0) << '\n';
    return 0;
}

Comprobación rápida

Compruebe cuánto entiende de los tipos de calendario de C++20.

Resumen

Ha aprendido sobre la compatibilidad con calendarios de C++20:

  • year, month, day y year_month_day con el constructor mediante /
  • la validación con ok() y las comprobaciones con is_leap()
  • sys_days para realizar operaciones con días y consultar el día de la semana
  • last para obtener el final del mes, además de una introducción a zoned_time

Con esto termina el curso Time and the Chrono Library.

Preguntas frecuentes

¿La lección «Calendario y zonas horarias» es gratis?

Sí — el texto completo de «Calendario y zonas horarias» 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 «Calendario y zonas horarias»?

Use los tipos de calendario de C++20 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 4 de 4.

¿Cuánto tiempo toma la lección «Calendario y zonas horarias»?

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.

Todas las lecciones de este curso

  1. Duraciones y relojes
  2. Puntos temporales
  3. Medición del rendimiento del código
  4. Calendario y zonas horarias
← Volver a C++ Academy