Módulo 14 - Datas e expressões regulares
Formatando e lendo datas
11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Transformar um objeto de data em texto com strftime.
- Conhecer os códigos de formato como %d, %m e %Y.
- Ler uma data escrita em texto com strptime.
- Trabalhar com o formato brasileiro dd/mm/aaaa nos dois sentidos.
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: Formatando e lendo datas.
Os objetivos desta aula. Transformar um objeto de data em texto com strftime. Conhecer os códigos de formato como %d, %m e %Y. Ler uma data escrita em texto com strptime. Trabalhar com o formato brasileiro dd/mm/aaaa nos dois sentidos.
Veja o essencial, parte por parte.
De objeto para texto com strftime. strftime pega uma data e devolve texto: data.strftime("%d/%m/%Y").
De texto para objeto com strptime. Se o texto é "02/07/2026" e você passa "%Y-%m-%d", o Python levanta ValueError.
Ida e volta no formato brasileiro. Na prática, esses dois métodos costumam trabalhar juntos.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
De objeto para texto com strftime
Quando o print mostra uma data, ele usa o formato internacional, como 2026-07-02. É ótimo para o computador, mas o brasileiro está acostumado a ver 02/07/2026. Para escolher exatamente como a data aparece, você usa o método strftime. Ele recebe um molde, um texto com marcadores especiais, e devolve a data preenchida nesse molde. Cada marcador começa com um sinal de porcentagem: %d é substituído pelo dia com dois dígitos, %m pelo mês com dois dígitos e %Y pelo ano com quatro dígitos.
from datetime import date
d = date(2026, 7, 2)
print(d.strftime("%d/%m/%Y")) # 02/07/2026 (padrao brasileiro)
print(d.strftime("%Y-%m-%d")) # 2026-07-02 (padrao internacional)
print(d.strftime("%d de %m")) # 02 de 07
# strftime sempre devolve texto (str):
formatada = d.strftime("%d/%m/%Y")
print(type(formatada)) # <class 'str'>O mesmo objeto de data vira textos diferentes, conforme o molde. O resultado é sempre uma string.
| Código | Significado | Exemplo (02/07/2026 14:05) |
|---|---|---|
| %d | Dia do mês com 2 dígitos | 02 |
| %m | Mês com 2 dígitos | 07 |
| %Y | Ano com 4 dígitos | 2026 |
| %y | Ano com 2 dígitos | 26 |
| %H | Hora (0 a 23) | 14 |
| %M | Minuto | 05 |
Os códigos de formato mais usados no dia a dia. A lista completa está na documentação oficial.
De texto para objeto com strptime
O caminho inverso é igualmente comum: o usuário digita uma data como texto e você precisa transformá-la em objeto para calcular. Quem faz isso é o método strptime, que fica no tipo datetime. Você passa dois argumentos: o texto e o molde que descreve esse texto. É essencial que o molde bata com o formato do texto, marcador por marcador, separador por separador. Se o usuário escreveu 02/07/2026, o molde tem que ser exatamente "%d/%m/%Y", com as mesmas barras.
from datetime import datetime
texto = "02/07/2026"
d = datetime.strptime(texto, "%d/%m/%Y")
print(d) # 2026-07-02 00:00:00
print(type(d)) # <class 'datetime.datetime'>
print(d.year) # 2026
print(d.month) # 7
# Agora que virou objeto, da para calcular e comparar:
print(d < datetime(2027, 1, 1)) # Truestrptime lê o texto guiado pelo molde e devolve um datetime pronto para calcular e comparar.
Ida e volta no formato brasileiro
Na prática, esses dois métodos costumam trabalhar juntos. Você recebe uma data em texto no formato brasileiro, converte com strptime para poder calcular, faz o que precisa e, no fim, formata de volta com strftime para mostrar ao usuário. É o ciclo completo: texto vira objeto, o objeto é útil, o objeto vira texto de novo. O exemplo abaixo mostra esse vai e volta, lendo uma data digitada, confirmando o dia da semana e devolvendo uma frase amigável.
from datetime import datetime
digitada = "25/12/2026"
# 1) Texto -> objeto, para poder calcular
d = datetime.strptime(digitada, "%d/%m/%Y")
# 2) Descobrir o dia da semana (%A) e formatar de volta
dia_semana = d.strftime("%A") # 'Friday' (idioma do sistema)
bonita = d.strftime("%d/%m/%Y") # '25/12/2026'
print(f"A data {bonita} cai em {dia_semana}.")
# A data 25/12/2026 cai em Friday.
print(d.year, d.month, d.day) # 2026 12 25Ciclo completo: strptime lê o texto, você trabalha o objeto e strftime devolve o texto formatado.
Vale um aviso sobre nomes de dias e meses por extenso. O código %A devolve o nome do dia da semana, mas no idioma configurado no sistema operacional, o que muitas vezes sai em inglês, como Friday. Para textos em português, o mais previsível é montar você mesmo o resultado a partir do número do mês, ou usar uma lista de nomes em português indexada por d.month. Isso mantém a saída sempre em pt-BR, sem depender da configuração da máquina de quem roda o programa.
Teste rápido
O usuário digitou "15/08/2026". Qual chamada transforma esse texto em um objeto de data?
Perguntas frequentes
- Como decorar se é strftime ou strptime?
- Pense no p de strptime como parse, que é interpretar um texto. Então strptime lê texto e produz um objeto. strftime, sem o p, faz o contrário: formata um objeto em texto (string format time). Um truque: strptime tem parse, começa pelo texto.
- Por que o print mostra a data como 2026-07-02 e não 02/07/2026?
- Porque o print usa o formato internacional padrão (AAAA-MM-DD) do tipo datetime. Para ver no formato brasileiro, aplique strftime("%d/%m/%Y"). O formato interno não muda; você só escolhe como exibir na hora de gerar o texto.
- O que acontece se o texto não bate com o molde do strptime?
- O Python levanta um ValueError explicando que os dados não conferem com o formato. É por isso que, ao ler datas digitadas pelo usuário, vale envolver o strptime em um try e except ValueError, para avisar de forma amigável quando a data vier em formato inesperado.
- Como escrevo o ano com dois dígitos, tipo 26?
- Use %y minúsculo em vez de %Y maiúsculo. Assim, strftime("%d/%m/%y") sobre 02/07/2026 devolve 02/07/26. Cuidado ao ler com %y, porque anos de dois dígitos são ambíguos; para datas importantes, prefira sempre o ano completo com %Y.
- Por que %A mostra o dia da semana em inglês?
- Porque strftime usa o idioma configurado no sistema operacional (o locale). Em muitas máquinas isso sai em inglês, como Monday. Para garantir português, monte o nome a partir de uma lista sua indexada pelo número do dia ou do mês, em vez de depender do locale.
- strftime funciona tanto em date quanto em datetime?
- Funciona nos dois. A diferença é que um objeto date não tem hora, então códigos como %H (hora) e %M (minuto) não fazem sentido nele e podem sair como zero ou dar erro conforme o caso. Em datetime, todos os códigos de data e de hora funcionam.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.