Módulo 14 - Datas e expressões regulares
Trabalhando com datas
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Entender por que data tem um tipo próprio em vez de virar texto.
- Criar datas com date e datas com hora com datetime.
- Pegar a data e a hora atuais com datetime.now.
- Acessar ano, mês e dia de um objeto de data com segurança.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Trabalhando com datas.
Os objetivos desta aula. Entender por que data tem um tipo próprio em vez de virar texto. Criar datas com date e datas com hora com datetime. Pegar a data e a hora atuais com datetime.now. Acessar ano, mês e dia de um objeto de data com segurança.
Veja o essencial, parte por parte.
Data não é texto. O Python tem tipos próprios para data: date (só a data) e datetime (data com hora).
A data de agora e de hoje. Você chama direto no tipo: date.today() e datetime.now(), sem criar nada antes.
Lendo ano, mês e dia. A grande vantagem de ter um objeto de data é acessar cada parte dela com segurança.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Data não é texto
Uma tentação comum de quem começa é guardar uma data como texto, por exemplo a string "25/12/2026". Funciona para mostrar na tela, mas vira uma dor de cabeça na hora de calcular. Quantos dias faltam para essa data? Que dia da semana ela cai? Ela é depois de outra data? Com texto, você teria que fatiar a string, converter pedaços em número e ainda lembrar que fevereiro tem 28 ou 29 dias. O Python resolve isso com um tipo próprio para datas, que já sabe tudo sobre o calendário.
Esse tipo mora no módulo datetime, que já vem com o Python, sem instalar nada. O nome pode confundir no começo: existe o módulo datetime e, dentro dele, um tipo também chamado datetime, além do tipo date. Por isso o jeito mais claro de importar é trazer os nomes que você quer usar, com from datetime import date, datetime. A partir daí, date representa uma data pura (ano, mês e dia) e datetime representa uma data com hora, minuto e segundo.
from datetime import date, datetime
# Uma data pura: ano, mes, dia (nessa ordem)
natal = date(2026, 12, 25)
print(natal) # 2026-12-25
print(type(natal)) # <class 'datetime.date'>
# Uma data com hora: ano, mes, dia, hora, minuto
reuniao = datetime(2026, 12, 25, 14, 30)
print(reuniao) # 2026-12-25 14:30:00date guarda só a data; datetime guarda data e hora. A ordem é sempre do maior para o menor.
A data de agora e de hoje
Boa parte dos programas precisa saber que dia é hoje: para carimbar um registro, calcular um prazo ou mostrar a data atual. Para isso, date tem o método today() e datetime tem o método now(). O primeiro devolve só a data de hoje; o segundo devolve a data com a hora exata do momento em que você chamou. Como eles dependem do relógio do computador, o resultado muda cada vez que você roda, então os comentários abaixo são apenas um exemplo do formato.
from datetime import date, datetime
hoje = date.today()
agora = datetime.now()
print(hoje) # 2026-07-02 (a data de hoje)
print(agora) # 2026-07-02 09:41:07.123456 (data e hora de agora)
# Continua sendo um objeto, nao um texto:
print(type(hoje)) # <class 'datetime.date'>
print(type(agora)) # <class 'datetime.datetime'>today() dá a data de hoje; now() dá a data e a hora do momento. O valor muda a cada execução.
Lendo ano, mês e dia
A grande vantagem de ter um objeto de data é acessar cada parte dela com segurança. Um objeto date ou datetime guarda o ano em .year, o mês em .month e o dia em .day. Se for um datetime, ele também tem .hour, .minute e .second. Repare que são atributos, escritos sem parênteses, porque você está lendo um valor guardado, não chamando uma ação. Com isso, você monta qualquer texto ou faz qualquer comparação sem fatiar strings.
from datetime import datetime
agora = datetime(2026, 7, 2, 9, 41, 7)
print(agora.year) # 2026
print(agora.month) # 7
print(agora.day) # 2
print(agora.hour) # 9
print(agora.minute) # 41
# Montar um texto legivel usando as partes:
print(f"Dia {agora.day} do mes {agora.month} de {agora.year}")
# Dia 2 do mes 7 de 2026
# Comparar datas funciona direto, sem gambiarra:
print(datetime(2026, 1, 1) < agora) # TrueAtributos como .year e .month leem cada parte da data. Comparações com < e > funcionam direto.
Compare essas duas linhas para sentir a diferença. Com um objeto de data, agora.month já devolve o número 7, pronto para usar em contas. Se a data fosse a string "02/07/2026", você teria que escrever algo como int(texto[3:5]) para chegar ao mês, torcendo para o formato nunca mudar. O tipo de data elimina essa fragilidade. Comparar duas datas também sai de graça: como o Python entende que 1 de janeiro vem antes de 2 de julho, o operador menor que responde True sem nenhum truque. Guardar datas como objetos, e não como texto, é o primeiro hábito profissional deste módulo.
Teste rápido
Você tem uma data guardada em uma variável chamada d. Como pega o ano dela?
Perguntas frequentes
- Qual a diferença entre date e datetime?
- date guarda só a data: ano, mês e dia. datetime guarda a data e também a hora, com hora, minuto e segundo. Use date quando a hora não importa (um aniversário, um vencimento) e datetime quando você precisa do horário exato (um registro de evento).
- Por que a ordem em date(2026, 12, 25) é ano, mês, dia?
- O construtor do Python segue a ordem do componente maior para o menor: ano, depois mês, depois dia. É a mesma lógica do formato internacional AAAA-MM-DD que o print mostra. Não confunda com o formato brasileiro dd/mm/aaaa, que é só uma forma de exibir, vista na próxima aula.
- Preciso instalar algo para usar datetime?
- Não. O módulo datetime faz parte da biblioteca padrão do Python, então já vem instalado. Basta importar o que você quer usar, por exemplo from datetime import date, datetime, e o Playground do curso roda esses exemplos sem instalar nada.
- Por que today() e now() têm parênteses, mas .year não?
- today() e now() são métodos: ações que o Python executa para descobrir a data ou a hora naquele instante, por isso levam parênteses. Já .year é um atributo, um valor já guardado dentro do objeto, então é lido sem parênteses. Essa distinção vale para todo o Python.
- Posso comparar duas datas com > e <?
- Pode, e é uma das grandes vantagens do tipo. Como o Python entende o calendário, data_a < data_b devolve True quando data_a é mais antiga. Isso funciona tanto para date quanto para datetime, desde que você compare tipos iguais entre si.
- O que a hora de datetime.now() representa?
- É a hora local do relógio do computador que está rodando o programa, no momento da chamada. Para prazos, carimbos e comparações do dia a dia, isso costuma ser suficiente. Fuso horário e horário universal são um tema mais avançado, fora do escopo desta aula.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.