programandoai

datetime e json: datas e o formato universal de dados

Registrar quando algo aconteceu, e trocar dados estruturados com outro sistema (ou guardar em arquivo), são tarefas tão comuns que merecem módulos próprios da biblioteca padrão.

Estudar esta lição interativa →

Dois problemas aparecem o tempo todo em programas reais: registrar quando algo aconteceu (um pedido, um cadastro), e trocar dados estruturados com outro sistema, ou simplesmente guardá-los num arquivo de um jeito que qualquer outra linguagem também consiga ler depois. A biblioteca padrão do Python tem um módulo pronto para cada um desses casos: datetime e json.

import datetime

data_pedido = datetime.date(2026, 1, 10)
data_hoje = datetime.date(2026, 1, 25)

diferenca = data_hoje - data_pedido
print(diferenca.days)

date(...) cria uma data específica; timedelta calcula a diferença entre duas datas.

datetime.date(ano, mes, dia) cria uma data específica. Subtrair duas datas (data2 - data1) devolve um objeto timedelta, cujo atributo .days entrega a diferença em dias, pronta para usar em cálculos como "quantos dias até o vencimento".

Pense no módulo json como um tradutor universal entre "a forma como o Python organiza dados na memória" (dicionários, listas) e "um formato de texto que praticamente qualquer linguagem de programação do planeta consegue ler". É o formato mais comum para uma página web conversar com um servidor, ou para salvar dados estruturados num arquivo simples.

import json

produto = {"nome": "Caneta", "preco": 3.5, "disponivel": True}

texto_json = json.dumps(produto)
print(texto_json)

de_volta = json.loads(texto_json)
print(de_volta["nome"])

dumps converte Python para texto JSON; loads faz o caminho inverso.

json.dumps(dicionario) (de "dump string") converte um dicionário (ou lista) Python numa string de texto no formato JSON. json.loads(texto) (de "load string") faz o caminho inverso, transformando uma string JSON de volta num dicionário Python de verdade, pronto para acessar por chave normalmente.

indent deixa o JSON legível para humanos

json.dumps(dados, indent=2, ensure_ascii=False) formata o texto com quebras de linha e recuo, bem mais fácil de ler do que a versão compacta padrão, útil ao salvar em arquivo ou exibir para depuração. ensure_ascii=False evita que acentos virem códigos escapados ilegíveis no texto final.

Nem todo valor Python vira JSON diretamente

json.dumps só sabe converter os tipos básicos (dicionários, listas, strings, números, booleanos, None). Tentar converter um objeto de uma classe sua, ou uma data datetime.date, gera TypeError: Object of type date is not JSON serializable. Nesses casos, é preciso converter o valor problemático para um tipo simples (como uma string, com str(data)) antes de passar para json.dumps.

import json

pedido = {"cliente": "Ana", "total": 129.9}

pedido_json = json.dumps(pedido, indent=2)
print(pedido_json)

Use json.dumps com indent=2 e imprima o resultado.

Complete a função resumo_json(nome, pontos): monte um dicionário com as chaves "nome" e "pontos" a partir dos parâmetros, e devolva json.dumps(...) desse dicionário (sem indent, formato compacto padrão). resumo_json("Ana", 10) deve devolver o texto '{"nome": "Ana", "pontos": 10}'.
import json

def resumo_json(nome, pontos):
    dados = {}
    # preencha dados com as chaves "nome" e "pontos", e devolva o JSON
    pass

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso