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.

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ódigoSignificadoExemplo (02/07/2026 14:05)
%dDia do mês com 2 dígitos02
%mMês com 2 dígitos07
%YAno com 4 dígitos2026
%yAno com 2 dígitos26
%HHora (0 a 23)14
%MMinuto05

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))  # True

strptime 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 25

Ciclo 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.