Datas e Horas no Python com datetime

Tempo de leitura: 13 minutos
Foto de um calendário

Trabalhar com datas e horas é uma das tarefas mais importantes em programação. Seja para criar sistemas de agendamento, controlar prazos ou analisar dados temporais, você precisa dominar essas operações. O Python oferece o módulo datetime que facilita muito esse trabalho.

Neste guia completo, você vai aprender tudo sobre como manipular datas e horas no Python. Vamos desde os conceitos básicos até operações avançadas, sempre com exemplos práticos que você pode usar em seus projetos.

Para complementar este conteúdo, confira este excelente vídeo da Hashtag Treinamentos que explica como trabalhar com tempo no Python:

YouTube player

Créditos: Hashtag Treinamentos

O que é o Módulo datetime do Python

O datetime é um módulo nativo do Python. Isso significa que você não precisa instalar nada extra para usá-lo. Ele vem junto com o Python quando você faz a instalação padrão.

Este módulo contém várias classes que ajudam a trabalhar com datas e horas. As principais são:

  • date: trabalha apenas com datas (ano, mês e dia)
  • time: trabalha apenas com horas (hora, minuto, segundo e microssegundo)
  • datetime: combina data e hora em um único objeto
  • timedelta: representa uma duração ou diferença entre datas

Como o datetime é um módulo do Python, você precisa importá-lo antes de usar. Existem diferentes formas de fazer essa importação, dependendo do que você precisa.

Como Importar o Módulo datetime

Existem três formas principais de importar módulos no Python. Cada uma tem suas vantagens e você pode escolher a que melhor se adapta ao seu código.

A primeira forma importa o módulo completo:

Python
import datetime

data_atual = datetime.date.today()
print(data_atual)

A segunda forma importa apenas classes específicas:

Python
from datetime import date, time, datetime

data_atual = date.today()
print(data_atual)

A terceira forma usa um alias (apelido) para facilitar:

Python
import datetime as dt

data_atual = dt.date.today()
print(data_atual)

Nos exemplos deste artigo, vamos usar a segunda forma por ser mais prática. Ela deixa o código mais limpo e fácil de ler.

Trabalhando com Datas usando a Classe date

A classe date é perfeita quando você precisa trabalhar apenas com datas. Ela não lida com horas, apenas com ano, mês e dia.

Criando uma Data Específica

Para criar uma data específica, você precisa passar três números inteiros: ano, mês e dia. Veja como funciona:

Python
from datetime import date

aniversario = date(1995, 6, 15)
print(aniversario)  # 1995-06-15

O formato de saída padrão é sempre AAAA-MM-DD (ano-mês-dia). Este é o formato internacional ISO 8601, usado mundialmente em programação.

Obtendo a Data Atual

Para pegar a data de hoje do sistema, use o método today():

Python
from datetime import date

hoje = date.today()
print(hoje)
print(f"Hoje é dia {hoje}")

Este método é muito útil em sistemas que precisam registrar quando algo aconteceu. Por exemplo, em um sistema de vendas ou de controle de tarefas.

Acessando Partes Individuais da Data

Você pode extrair o ano, mês ou dia separadamente usando atributos simples:

Python
from datetime import date

hoje = date.today()

ano = hoje.year
mes = hoje.month
dia = hoje.day

print(f"Ano: {ano}")
print(f"Mês: {mes}")
print(f"Dia: {dia}")

Isso é especialmente útil quando você precisa fazer cálculos ou comparações com partes específicas da data. Por exemplo, verificar se um mês é dezembro ou se o dia é o último do mês.

Trabalhando com Horas usando a Classe time

A classe time trabalha exclusivamente com horários. Ela não tem informação de data, apenas de hora, minuto, segundo e microssegundo.

Criando um Horário Específico

Para criar um horário, você pode passar até quatro parâmetros:

Python
from datetime import time

# Apenas hora e minuto
horario1 = time(14, 30)
print(horario1)  # 14:30:00

# Hora, minuto e segundo
horario2 = time(14, 30, 45)
print(horario2)  # 14:30:45

# Hora, minuto, segundo e microssegundo
horario3 = time(14, 30, 45, 500000)
print(horario3)  # 14:30:45.500000

Os valores padrão são zero. Se você não informar os segundos, eles serão 0. O mesmo vale para os microssegundos.

Acessando Componentes do Horário

Assim como com datas, você pode acessar cada parte do horário separadamente:

Python
from datetime import time

agora = time(15, 45, 30, 250000)

print(f"Hora: {agora.hour}")
print(f"Minuto: {agora.minute}")
print(f"Segundo: {agora.second}")
print(f"Microssegundo: {agora.microsecond}")

Esta funcionalidade é útil quando você precisa validar horários ou criar lógicas baseadas em horas específicas do dia.

Unindo Data e Hora com a Classe datetime

A classe datetime é a mais completa. Ela combina data e hora em um único objeto. Esta é a classe mais usada em projetos reais.

Criando um Objeto datetime Completo

Você pode criar um datetime passando até sete parâmetros:

Python
from datetime import datetime

# Apenas data
momento1 = datetime(2024, 12, 7)
print(momento1)

# Data e hora
momento2 = datetime(2024, 12, 7, 15, 30)
print(momento2)

# Data, hora e segundos
momento3 = datetime(2024, 12, 7, 15, 30, 45)
print(momento3)

# Completo com microssegundos
momento4 = datetime(2024, 12, 7, 15, 30, 45, 500000)
print(momento4)

Similar ao que vimos em funções no Python, os parâmetros têm valores padrão. Se você não informar a hora, ela será 00:00:00.

Obtendo Data e Hora Atual

Para pegar o momento exato atual, use o método now():

Python
from datetime import datetime

agora = datetime.now()
print(agora)
print(f"Momento atual: {agora}")

Este método retorna a data e hora do sistema operacional. É muito usado em logs, registros de atividades e sistemas que precisam marcar quando algo aconteceu.

Separando Data e Hora de um datetime

Você pode extrair apenas a data ou apenas a hora de um objeto datetime:

Python
from datetime import datetime

momento = datetime.now()

so_data = momento.date()
so_hora = momento.time()

print(f"Data: {so_data}")
print(f"Hora: {so_hora}")

Isso é útil quando você recebe um datetime completo mas precisa trabalhar apenas com uma parte dele.

Formatando Datas e Horas com strftime

O método strftime() transforma objetos de data e hora em strings formatadas. É essencial para mostrar datas de forma amigável ao usuário.

Principais Códigos de Formatação

Veja os códigos mais usados para formatar datas:

  • %d: dia do mês (01 a 31)
  • %m: mês (01 a 12)
  • %Y: ano com 4 dígitos (2024)
  • %y: ano com 2 dígitos (24)
  • %H: hora formato 24h (00 a 23)
  • %I: hora formato 12h (01 a 12)
  • %M: minutos (00 a 59)
  • %S: segundos (00 a 59)
  • %A: nome completo do dia da semana
  • %B: nome completo do mês

Exemplos Práticos de Formatação

Veja como usar esses códigos na prática:

Python
from datetime import datetime

agora = datetime.now()

# Formato brasileiro
formato_br = agora.strftime("%d/%m/%Y")
print(f"Data BR: {formato_br}")

# Formato americano
formato_us = agora.strftime("%m/%d/%Y")
print(f"Data US: {formato_us}")

# Formato completo
formato_completo = agora.strftime("%d/%m/%Y às %H:%M:%S")
print(f"Completo: {formato_completo}")

# Com nome do dia e mês
formato_extenso = agora.strftime("%A, %d de %B de %Y")
print(f"Extenso: {formato_extenso}")

O strftime() é muito flexível. Você pode combiná-lo com comandos print para exibir datas de qualquer forma que precisar.

Convertendo Strings em Datas com strptime

O método strptime() faz o contrário do strftime. Ele converte strings em objetos datetime. É muito usado quando você recebe datas em formato de texto.

Como Usar o strptime

Você precisa informar a string e o formato dela:

Python
from datetime import datetime

# String no formato brasileiro
texto_data = "25/12/2024"
data = datetime.strptime(texto_data, "%d/%m/%Y")
print(data)

# String com hora
texto_completo = "25/12/2024 14:30:00"
momento = datetime.strptime(texto_completo, "%d/%m/%Y %H:%M:%S")
print(momento)

# String em formato diferente
texto_us = "12-25-2024"
data_us = datetime.strptime(texto_us, "%m-%d-%Y")
print(data_us)

O formato precisa corresponder exatamente à string. Se a string tem barras, use barras no formato. Se tem traços, use traços.

Exemplo Prático: Sistema de Agendamento

Veja um exemplo real de como usar strptime em um sistema:

Python
from datetime import datetime

def agendar_compromisso():
    data_texto = input("Digite a data (dd/mm/aaaa): ")
    hora_texto = input("Digite a hora (HH:MM): ")
    
    data = datetime.strptime(data_texto, "%d/%m/%Y")
    hora = datetime.strptime(hora_texto, "%H:%M")
    
    # Combina data e hora
    compromisso = datetime(
        data.year, data.month, data.day,
        hora.hour, hora.minute
    )
    
    print(f"Compromisso agendado para: {compromisso.strftime('%d/%m/%Y às %H:%M')}")

agendar_compromisso()

Este código mostra como receber datas do usuário e transformá-las em objetos datetime para usar no sistema.

Calculando Diferenças com timedelta

A classe timedelta representa uma duração. Você usa ela para fazer cálculos com datas, como adicionar dias ou calcular diferenças.

Criando um timedelta

Você pode criar um timedelta especificando dias, horas, minutos ou segundos:

Python
from datetime import timedelta

# 7 dias
uma_semana = timedelta(days=7)
print(uma_semana)

# 3 horas e 30 minutos
tempo = timedelta(hours=3, minutes=30)
print(tempo)

# Combinando vários valores
periodo = timedelta(days=10, hours=5, minutes=30, seconds=45)
print(periodo)

O timedelta sempre mostra o resultado em dias, segundos e microssegundos, mas você pode usar qualquer unidade ao criar.

Somando e Subtraindo Datas

Você pode usar operadores matemáticos para manipular datas:

Python
from datetime import datetime, timedelta

hoje = datetime.now()

# Adicionar 7 dias
proxima_semana = hoje + timedelta(days=7)
print(f"Daqui a 7 dias: {proxima_semana.strftime('%d/%m/%Y')}")

# Subtrair 30 dias
mes_atras = hoje - timedelta(days=30)
print(f"30 dias atrás: {mes_atras.strftime('%d/%m/%Y')}")

# Adicionar horas
daqui_3_horas = hoje + timedelta(hours=3)
print(f"Daqui a 3 horas: {daqui_3_horas.strftime('%H:%M')}")

Esta funcionalidade é essencial em sistemas que trabalham com prazos, como e-commerce, sistemas de cobrança ou controle de projetos.

Calculando Diferença Entre Datas

Quando você subtrai duas datas, o resultado é um timedelta:

Python
from datetime import datetime

# Duas datas diferentes
natal = datetime(2024, 12, 25)
hoje = datetime.now()

# Calcula a diferença
diferenca = natal - hoje

print(f"Faltam {diferenca.days} dias para o Natal")
print(f"Ou {diferenca.total_seconds()} segundos")

O atributo days retorna apenas os dias completos. O método total_seconds() retorna tudo convertido em segundos.

Comparando Datas e Horas

Você pode comparar objetos datetime usando os operadores de comparação do Python. Isso é muito útil para validações e lógica de negócios.

Operadores de Comparação

Todos os operadores de comparação funcionam com datetime:

Python
from datetime import datetime
data1 = datetime(2024, 1, 15)
data2 = datetime(2024, 6, 20)
hoje = datetime.now()
# Comparações simples
print(data1 < data2)   # True
print(data1 > data2)   # False
print(data1 == data2)  # False
print(data1 != data2)  # True
# Comparando com hoje
if hoje > data1:
    print("data1 já passou")
    
if data2 > hoje:
    print("data2 ainda não chegou")

Exemplo Prático: Validação de Idade

Veja como usar comparações em um caso real:

Python
from datetime import datetime, timedelta
def verificar_maioridade(data_nascimento):
    hoje = datetime.now()
    idade_minima = hoje - timedelta(days=18*365)
    
    if data_nascimento <= idade_minima:
        return True
    return False
# Testando
nascimento = datetime(2000, 5, 10)
if verificar_maioridade(nascimento):
    print("Maior de idade")
else:
    print("Menor de idade")

Este tipo de validação é comum em sistemas de cadastro, e-commerce e aplicações que precisam verificar idade.

Trabalhando com Timestamps

Um timestamp é um número que representa a quantidade de segundos desde 1º de janeiro de 1970. É muito usado em bancos de dados e APIs.

Convertendo datetime para Timestamp

Use o método timestamp() para converter:

Python
from datetime import datetime

agora = datetime.now()
timestamp = agora.timestamp()

print(f"Timestamp atual: {timestamp}")
print(f"Tipo: {type(timestamp)}")

O resultado é um número float que representa os segundos desde 1970.

Convertendo Timestamp para datetime

Para fazer o caminho inverso, use fromtimestamp():

Python
from datetime import datetime

# Timestamp de exemplo
timestamp = 1702000000

# Converte para datetime
data = datetime.fromtimestamp(timestamp)
print(f"Data: {data.strftime('%d/%m/%Y %H:%M:%S')}")

Isto é muito útil quando você trabalha com APIs externas ou manipula dados de planilhas que usam timestamps.

Aplicações Práticas do datetime

Agora que você conhece os conceitos, veja algumas aplicações práticas que você pode usar em seus projetos.

Sistema de Logs

Registrar eventos com data e hora é essencial:

Python
from datetime import datetime

def registrar_log(mensagem):
    agora = datetime.now()
    timestamp = agora.strftime("%Y-%m-%d %H:%M:%S")
    log = f"[{timestamp}] {mensagem}"
    
    with open("log.txt", "a", encoding="utf-8") as arquivo:
        arquivo.write(log + "\n")
    
    print(log)

# Usando o sistema de log
registrar_log("Sistema iniciado")
registrar_log("Usuário fez login")
registrar_log("Erro ao conectar no banco")

Calculadora de Idade

Calcule idade precisa em anos, meses e dias:

Python
from datetime import datetime
def calcular_idade(data_nascimento):
    hoje = datetime.now()
    
    anos = hoje.year - data_nascimento.year
    meses = hoje.month - data_nascimento.month
    dias = hoje.day - data_nascimento.day
    
    # Ajusta se ainda não fez aniversário
    if meses < 0 or (meses == 0 and dias < 0):
        anos -= 1
        meses += 12
    
    if dias < 0:
        meses -= 1
        dias += 30
    
    return anos, meses, dias
# Testando
nascimento = datetime(1995, 6, 15)
anos, meses, dias = calcular_idade(nascimento)
print(f"Idade: {anos} anos, {meses} meses e {dias} dias")

Contador Regressivo

Crie um contador para eventos futuros:

Python
from datetime import datetime, timedelta
def tempo_ate_evento(data_evento, nome_evento):
    agora = datetime.now()
    
    if data_evento < agora:
        return f"{nome_evento} já passou!"
    
    diferenca = data_evento - agora
    
    dias = diferenca.days
    segundos = diferenca.seconds
    horas = segundos // 3600
    minutos = (segundos % 3600) // 60
    
    return f"Faltam {dias} dias, {horas} horas e {minutos} minutos para {nome_evento}"
# Testando
ano_novo = datetime(2025, 1, 1, 0, 0, 0)
print(tempo_ate_evento(ano_novo, "Ano Novo"))

Este código é muito usado em sites de eventos, lançamentos de produtos ou contadores de ofertas especiais.

Perguntas Frequentes (FAQ)

1. O que é o módulo datetime do Python?

É um módulo nativo do Python para trabalhar com datas e horas, incluindo classes para manipular e formatar informações temporais.

2. Como importar o datetime no Python?

Use import datetime para importar o módulo completo ou from datetime import date, time, datetime para classes específicas.

3. Qual a diferença entre date, time e datetime?

A classe date trabalha apenas com datas, time apenas com horas, e datetime combina ambos em um único objeto.

4. Como obter a data atual no Python?

Use date.today() para data ou datetime.now() para data e hora atuais do sistema.

5. O que é timedelta e para que serve?

Timedelta representa uma duração de tempo e é usado para fazer cálculos como adicionar dias, horas ou calcular diferenças entre datas.

6. Como formatar datas no formato brasileiro?

Use strftime("%d/%m/%Y") para formato DD/MM/AAAA ou combine com códigos de hora para incluir horário.

7. Como converter string em data no Python?

Use o método strptime() informando a string e seu formato, como datetime.strptime("25/12/2024", "%d/%m/%Y").

8. É possível comparar duas datas em Python?

Sim, você pode usar operadores como <, >, ==, != para comparar objetos date ou datetime diretamente.

9. O que é timestamp e como usar no Python?

Timestamp é o número de segundos desde 1970. Use timestamp() para converter datetime em número e fromtimestamp() para o inverso.

10. Como calcular a diferença entre duas datas?

Subtraia uma data da outra. O resultado será um objeto timedelta com a diferença em dias e segundos.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Logo CSV e logo do Python com um símbolo de '+'
    Fundamentos
    Foto do Leandro Hirt

    Como trabalhar com arquivos CSV no Python

    Aprenda a ler, escrever e manipular arquivos CSV usando Python. Guia completo com exemplos práticos da biblioteca csv padrão e

    Ler mais

    Tempo de leitura: 12 minutos
    10/12/2025
    Logo do Python + texto 'JSON'
    Fundamentos
    Foto do Leandro Hirt

    Como Trabalhar com JSON no Python

    JSON (JavaScript Object Notation) é um dos formatos de dados mais populares do mundo. Se você trabalha com APIs, armazenamento

    Ler mais

    Tempo de leitura: 13 minutos
    09/12/2025
    Programador pensando olhando para a tela
    Fundamentos
    Foto do Leandro Hirt

    Lógica de Programação com Python para Iniciantes

    Aprender lógica de programação com Python é uma das formas mais simples e agradáveis de começar no universo da tecnologia.

    Ler mais

    Tempo de leitura: 8 minutos
    09/12/2025
    Palavra Python escrita à mão em superfície amarela com desenho de carinha sorrindo.
    Fundamentos
    Foto do Leandro Hirt

    List Comprehension no Python para Iniciantes

    Aprenda list comprehension no Python de forma simples e prática. Descubra como criar listas de forma mais eficiente e elegante

    Ler mais

    Tempo de leitura: 13 minutos
    08/12/2025
    texto 'in' com o logo do Python ao lado
    Fundamentos
    Foto do Leandro Hirt

    Como usar o operador in no Python

    O operador in é uma das ferramentas mais úteis na programação Python. Ele permite verificar se um elemento existe dentro

    Ler mais

    Tempo de leitura: 15 minutos
    08/12/2025
    Logo do Python estilizada
    Fundamentos
    Foto do Leandro Hirt

    Todas as Funções Built-in do Python Explicadas

    Descubra todas as funções built-in do Python explicadas com exemplos práticos. Aprenda a usar print(), len(), input(), type() e mais

    Ler mais

    Tempo de leitura: 14 minutos
    08/12/2025

    Minicurso de Python

    Insira seu e-mail e para receber acesso às aulas agora mesmo