Trabalhando com datas no Python

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Salve salve Pythonista :wave:

Trabalhar com datas e horários é essencial em muitas aplicações Python.

Entender como manipular datas facilita tarefas como agendamentos, logs e análises temporais.

Neste artigo, abordaremos o módulo datetime do Python, explorando desde operações básicas até manipulações avançadas de datas e horários.

Com este conhecimento, você poderá gerenciar datas de forma eficiente em seus projetos Python.

Vá Direto ao Assunto…

Introdução ao Módulo datetime

O módulo datetime é a ferramenta padrão do Python para trabalhar com datas e horários.

Ele fornece classes para manipular datas, horários e intervalos de tempo.

Além disso, permite realizar operações como formatação, conversão e cálculo entre diferentes unidades de tempo.

Para começar, é necessário importar o módulo datetime:

1
import datetime

Trabalhando com Datas e Horas

Com o módulo datetime, podemos criar objetos que representam datas e horários específicos.

Vamos criar um objeto que representa a data atual:

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

Explicação do código:

  1. Importação: Importamos o módulo datetime.
  2. Objeto de Data Atual: Usamos datetime.date.today() para obter a data de hoje.
  3. Exibição: Imprimimos a data atual no formato YYYY-MM-DD.

A saída será:

1
datetime.date(2025, 2, 25)

Criando um Objeto de Horário

Além de datas, podemos criar objetos que representam horários:

1
2
hora_atual = datetime.datetime.now().time()
print(hora_atual)

Explicação do código:

  1. Método now(): datetime.datetime.now() retorna a data e hora atuais.
  2. Extração de Hora: Usamos .time() para obter apenas o componente de horário.
  3. Exibição: Imprimimos a hora atual no formato HH:MM:SS.microsegundos.

A saída será:

1
datetime.time(9, 27, 9, 484035)

Formatando Datas

Formatar datas é útil para exibir informações de maneira legível ou específica.

Usando strftime

A função strftime permite formatar objetos de data e hora:

1
2
3
data_atual = datetime.date.today()
data_formatada = data_atual.strftime("%d/%m/%Y")
print(data_formatada)

Explicação do código:

  1. Formato Personalizado: %d representa o dia, %m o mês e %Y o ano.
  2. Formatação: Convertendo data_atual para o formato DD/MM/AAAA.
  3. Exibição: Imprimimos a data formatada.

E a saída será:

1
25/02/2025

Exemplo de Formatação Completa

1
2
3
hora_atual = datetime.datetime.now().time()
hora_formatada = hora_atual.strftime("%H:%M:%S")
print("Hora:", hora_formatada)

Explicação do código:

  1. Formato de Hora: %H para horas, %M para minutos e %S para segundos.
  2. Formatação: Convertendo hora_atual para o formato HH:MM:SS.
  3. Exibição: Imprimimos a hora formatada.

A saída será:

1
Hora: 09:29:09

Convertendo Datas para Strings

Converter objetos de data para strings é útil para salvar ou exibir informações.

Usando str()

A função str() converte objetos de data para strings em um formato padrão:

1
2
3
data_atual = datetime.date.today()
data_str = str(data_atual)
print(data_str)

Explicação do código:

  1. Conversão: Usamos str(data_atual) para converter o objeto de data em uma string.
  2. Exibição: Imprimimos a string resultante no formato YYYY-MM-DD.

Sua saída será:

1
2025-02-25

Convertendo Strings para Datas

Às vezes, precisamos converter strings que representam datas em objetos de data.

Usando strptime

A função strptime permite analisar strings em objetos de data:

1
2
3
data_string = "25/12/2023"
data_convertida = datetime.datetime.strptime(data_string, "%d/%m/%Y").date()
print(data_convertida)

Explicação do código:

  1. String de Data: Definimos data_string no formato DD/MM/AAAA.
  2. Análise: Usamos strptime para converter a string em um objeto datetime.
  3. Extração de Data: Com .date(), extraímos apenas a data.
  4. Exibição: Imprimimos a data convertida no formato YYYY-MM-DD.

A saída será:

1
2023-12-25

Calculando Diferença entre Datas

Calcular a diferença entre datas é útil para determinar durações ou prazos.

Usando timedelta

A classe timedelta representa uma duração ou intervalo de tempo:

1
2
3
data_futura = datetime.date(2050, 1, 1)
diferenca = data_futura - data_atual
print(diferenca.days, "dias restantes")

Explicação do código:

  1. Data Futura: Criamos uma data específica para o futuro.
  2. Cálculo da Diferença: Subtraímos data_atual de data_futura para obter a diferença.
  3. Exibição: Imprimimos o número de dias restantes.

A saída será:

1
9076 dias restantes

Trabalhando com Timezones

Gerenciar fusos horários é crucial para aplicações globais.

Usando pytz

Embora o módulo datetime tenha suporte básico, bibliotecas como pytz oferecem funcionalidades avançadas.

Para isso, instale o pytz utilizando o pip com pip install pytz. Em seguida:

1
2
3
4
5
import pytz

fuso_horario = pytz.timezone("America/Sao_Paulo")
data_hora_local = datetime.datetime.now(fuso_horario)
print(data_hora_local)

Explicação do código:

  1. Importação do pytz: Importamos a biblioteca pytz.
  2. Definição do Fuso Horário: Especificamos o fuso horário desejado.
  3. Obtendo Data e Hora Local: Usamos now com o fuso horário definido.
  4. Exibição: Imprimimos a data e hora local com o fuso aplicado.

A saída será:

1
2025-02-25 15:37:28.861810-03:00

A parte final da data -03:00 é o fuso de São Paulo, GMT-3!

:wave: Ei, você aí! Quer dominar manipulação de datas em Python? Então conheça a Jornada Python agora e se torne um mestre em Python!

Trabalhando com timedelta

A classe timedelta permite realizar operações com intervalos de tempo.

Adicionando Dias a uma Data

1
2
3
4
5
6
import datetime 

data_atual = datetime.date.today()
intervalo = datetime.timedelta(days=10)
nova_data = data_atual + intervalo
print(nova_data)

Explicação do código:

  1. Criação do Intervalo: Definimos um intervalo de 10 dias com datetime.timedelta(days=10).
  2. Adição à Data Atual: Somamos o intervalo à data atual.
  3. Exibição: Imprimimos a nova data resultante.

A saída esperada é:

1
2025-03-07

Subtraindo Horas de um Horário

1
2
3
4
5
6
intervalo_horas = datetime.timedelta(hours=5)
nova_hora = datetime.datetime.now().time()
print("Hora atual:", nova_hora)

hora_ajustada = (datetime.datetime.combine(datetime.date.today(), nova_hora) - intervalo_horas).time()
print("Hora ajustada:", hora_ajustada)

Explicação do código:

  1. Criação do Intervalo de Horas: Definimos um intervalo de 5 horas.
  2. Combinação de Data e Hora: Combinamos a data de hoje com a hora atual.
  3. Subtração do Intervalo: Subtraímos o intervalo de horas da data e hora combinadas.
  4. Extração da Hora Ajustada: Obtemos apenas o componente de hora.
  5. Exibição: Imprimimos a hora antes e após a subtração.

Veja a saída esperada:

1
2
Hora atual: 15:40:58.201792
Hora ajustada: 10:40:58.201792

Trabalhando com Datas em Diferentes Formatos

Datas podem estar em diversos formatos, dependendo da aplicação.

Parsing de Múltiplos Formatos

Podemos criar funções para lidar com múltiplos formatos de data:

1
2
3
4
5
6
7
8
9
10
def parse_data(data_str):
    for fmt in ("%d/%m/%Y", "%Y-%m-%d", "%m-%d-%Y"):
        try:
            return datetime.datetime.strptime(data_str, fmt).date()
        except ValueError:
            continue
    raise ValueError("Formato de data inválido")

data_exemplo = parse_data("12-31-2023")
print(data_exemplo)

Explicação do código:

  1. Função de Parsing: Tentamos diferentes formatos para analisar a string de data.
  2. Laço de Tentativas: Iteramos sobre uma lista de formatos possíveis.
  3. Retorno da Data: Retornamos a data convertida se o formato corresponder.
  4. Exceção: Lançamos um erro se nenhum formato for válido.
  5. Exibição: Imprimimos a data convertida no formato YYYY-MM-DD.

Trabalhando com Datas em Diferentes Idiomas

Manipular datas em diferentes idiomas melhora a experiência do usuário global.

Usando locale

O módulo locale permite configurar a localização para formatação de datas:

1
2
3
4
5
6
7
8
9
10
import locale

# Seta a categoria do locale "tempo" (Locale Category: Time) para 
# - Português do Brasil (pt_BR)
# - Codificação UTF-8
locale.setlocale(locale.LC_TIME, 'pt_BR.UTF-8')

data_atual = datetime.date.today()
data_formatada = data_atual.strftime("%A, %d de %B de %Y")
print(data_formatada)

Explicação do código:

  1. Importação do locale: Importamos o módulo locale.
  2. Configuração da Localização: Definimos a localidade para português brasileiro.
  3. Formatação com locale: Usamos strftime para formatar a data com nomes de dias e meses em português.
  4. Exibição: Imprimimos a data formatada, por exemplo, “segunda-feira, 25 de dezembro de 2023”.

A saída será:

1
terça, 25 de fevereiro de 2025

Antes de continuar… Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Conclusão

Neste artigo, exploramos como trabalhar com datas no Python utilizando o módulo datetime.

Aprendemos a criar e formatar datas e horários, converter entre strings e objetos de data, calcular diferenças e manipular fusos horários.

Além disso, abordamos operações com timedelta, manipulações de datas futuras e passadas e formatação de datas em diferentes idiomas.

Com esses conhecimentos, você está preparado para gerenciar datas de forma eficaz em suas aplicações Python!

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.