Calendário e fusos horários
Use os tipos de calendário do C++20
Calendário e fusos horários é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Tipos de calendário do C++20
O C++20 adicionou um suporte abrangente a calendários em <chrono>. Agora, você pode expressar anos, meses e dias diretamente como tipos, em vez de manipular números inteiros.
year,month,dayyear_month_daypara uma data 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;
}Literais de calendário
Literais de calendário, como 2026y e 15d, além de meses nomeados, como std::chrono::May, tornam as datas mais naturais de ler.
#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;
}Construção de uma data
Combine as três partes com o operador / para formar um year_month_day. A ordem é ano, mês e dia.
#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;
}Validação de datas
Um year_month_day sabe se representa uma data de calendário válida. Use ok() para rejeitar valores impossíveis, como 30 de fevereiro.
#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;
}Dias do sistema
Converta uma data para sys_days, uma contagem de dias desde a época. Isso permite fazer cálculos com dias e calcular diferenças entre datas.
#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;
}Cálculos com dias
Adicionar days{n} a um sys_days avança a data em n dias; depois, você pode convertê-la novamente para uma data de calendário.
#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;
}Dia da semana
Converta um sys_days para um weekday para descobrir em que dia da semana cai uma data.
#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 dia de um mês
A marca especial last calcula o último dia de qualquer mês, tratando automaticamente os anos bissextos.
#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;
}Verificação de ano bissexto
O tipo year disponibiliza is_leap(), para que você não precise se lembrar das regras de divisibilidade.
#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 um ponto no tempo para uma data
Arredonde para baixo um ponto no tempo de system_clock até days e converta-o para um year_month_day para obter a data do calendário de hoje.
#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;
}Fusos horários
O C++20 também adiciona fusos horários por meio de std::chrono::zoned_time e do banco de dados da IANA. A disponibilidade depende da sua biblioteca padrão, mas o modelo associa um ponto no tempo a um fuso nomeado para exibir corretamente a 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;
}Verificação rápida
Verifique sua compreensão dos tipos de calendário do C++20.
Recapitulação
Você aprendeu sobre o suporte a calendários do C++20:
year,month,dayeyear_month_daycom o construtor/- validação com
ok()e verificações comis_leap() sys_dayspara cálculos com dias e consulta do dia da semanalastpara o fim do mês, além de uma introdução azoned_time
Isso conclui o curso Tempo e a Biblioteca Chrono.
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Calendário e fusos horários” é grátis?
Sim — o texto completo de “Calendário e fusos horários” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Calendário e fusos horários”?
Use os tipos de calendário do C++20 Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Calendário e fusos horários”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Durações e relógios
- Pontos no tempo
- Medição do desempenho do código
- Calendário e fusos horários