Calendrier et fuseaux horaires
Utiliser les types de calendrier de C++20
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,dayyear_month_daypour 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,dayetyear_month_dayavec l'opérateur de construction/- la validation avec
ok()et les vérifications avecis_leap() sys_dayspour les calculs sur les jours et la recherche du jour de la semainelastpour le dernier jour du mois, ainsi qu'une introduction àzoned_time
Le cours sur le temps et la bibliothèque Chrono est maintenant terminé.
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
- Durées et horloges
- Points temporels
- Mesurer les performances du code
- Calendrier et fuseaux horaires