C++ Academy · Leçon

Calendrier et fuseaux horaires

Utiliser les types de calendrier de C++20

Leçon 4 sur 413 étapes

Calendrier et fuseaux horaires est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Types de calendrier C++20

C++20 a ajouté une prise en charge complète du calendrier à <chrono>. Vous pouvez désormais représenter directement les années, les mois et les jours sous forme de types, au lieu de manipuler des entiers.

  • year, month, day
  • year_month_day pour une date complète
#include <iostream>
#include <chrono>

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

Littéraux de calendrier

Les littéraux de calendrier tels que 2026y et 15d, ainsi que les mois nommés comme std::chrono::May, rendent les dates naturelles à lire.

#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;
}

Construire une date

Combinez les trois éléments avec l'opérateur / pour former un year_month_day. L'ordre est celui de l'année, du mois, puis du jour.

#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;
}

Valider les dates

Un year_month_day sait s'il représente une véritable date du calendrier. Utilisez ok() pour rejeter les valeurs impossibles comme le 30 février.

#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

Convertissez une date en sys_days, c'est-à-dire un nombre de jours écoulés depuis l'époque. Vous pouvez ainsi effectuer des calculs sur les jours et calculer les différences entre les dates.

#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;
}

Arithmétique sur les jours

Ajouter days{n} à un sys_days avance de n jours, après quoi vous pouvez reconvertir le résultat en date du calendrier.

#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;
}

Jour de la semaine

Convertissez un sys_days en weekday pour déterminer le jour de la semaine correspondant à une date.

#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;
}

Dernier jour d'un mois

La balise spéciale last calcule le dernier jour de n'importe quel mois, en gérant automatiquement les années bissextiles.

#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;
}

Vérification des années bissextiles

Le type year fournit is_leap(), vous évitant de devoir retenir vous-même les règles de divisibilité.

#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;
}

Passer d'un instant à une date

Arrondissez vers le bas un instant de system_clock à la précision days, puis convertissez-le en year_month_day pour obtenir la date du calendrier d'aujourd'hui.

#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;
}

Fuseaux horaires

C++20 ajoute également les fuseaux horaires grâce à std::chrono::zoned_time et à la base de données IANA. Leur disponibilité dépend de votre bibliothèque standard, mais ce modèle associe un instant à un fuseau nommé pour afficher correctement l'heure locale.

#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;
}

Vérification rapide

Vérifiez votre compréhension des types de calendrier de C++20.

Bilan

Vous avez découvert la prise en charge des calendriers par C++20 :

  • year, month, day et year_month_day avec l'opérateur de construction /
  • la validation avec ok() et les vérifications avec is_leap()
  • sys_days pour les calculs sur les jours et la recherche du jour de la semaine
  • last pour le dernier jour du mois, ainsi qu'une introduction à zoned_time

Le cours sur le temps et la bibliothèque Chrono est maintenant terminé.

Gratuit pour commencer

Apprends C++ avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Calendrier et fuseaux horaires » est-elle gratuite ?

Oui — le texte complet de « Calendrier et fuseaux horaires » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Calendrier et fuseaux horaires » ?

Utiliser les types de calendrier de C++20 Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Calendrier et fuseaux horaires » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Durées et horloges
  2. Points temporels
  3. Mesurer les performances du code
  4. Calendrier et fuseaux horaires
← Retour à C++ Academy