Manipulando Datas em Python
Formatação de Datas e Horas
Em Python, para formatar objetos das classes date e time, utiliza-se o método strftime(format). Este método recebe um único parâmetro que define o formato desejado para a conversão da data ou hora.
Códigos de formatação mais utilizados:
- %a: abreviação do dia da semana (ex.: "Wed" para "Wednesday").
- %A: nome completo do dia da semana (ex.: "Wednesday").
- %b: abreviação do mês (ex.: "Oct" para "October").
- %B: nome completo do mês (ex.: "October").
- %d: dia do mês com dois dígitos, incluindo zero à esquerda, se necessário (ex.: "01").
- %m: número do mês com dois dígitos (ex.: "05").
- %y: ano com dois dígitos (ex.: "23").
- %Y: ano com quatro dígitos (ex.: "2023").
- %H: hora no formato de 24 horas (ex.: "13").
- %I: hora no formato de 12 horas (ex.: "01").
- %M: minutos.
- %S: segundos.
- %f: microssegundos.
- %p: indicador AM/PM.
- %c: data e hora formatadas conforme a localidade atual.
- %x: data formatada conforme a localidade atual.
- %X: hora formatada conforme a localidade atual.
Exemplos de uso:
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d"))             # Exemplo: 2024-11-15
print(now.strftime("%d/%m/%Y"))             # Exemplo: 15/11/2024
print(now.strftime("%d/%m/%y"))             # Exemplo: 15/11/24
print(now.strftime("%d %B %Y (%A)"))        # Exemplo: 15 November 2024 (Friday)
print(now.strftime("%d/%m/%y %I:%M %p"))    # Exemplo: 15/11/24 11:30 AMPor padrão, os nomes de meses e dias da semana estão em inglês. Para adaptá-los à localidade atual, pode-se utilizar o módulo locale:
from datetime import datetime
import locale
# Define a localidade do sistema (por exemplo, "pt_BR.UTF-8" para português do Brasil)
locale.setlocale(locale.LC_ALL, "pt_BR.UTF-8")
now = datetime.now()
print(now.strftime("%d %B %Y (%A)"))        # Exemplo: 15 novembro 2024 (sexta-feira)Soma e Subtração de Datas e Horas
Para realizar operações com períodos de tempo em datas, utiliza-se a classe timedelta do módulo datetime. Essa classe permite definir intervalos de tempo específicos.
A função construtora timedelta permite especificar os seguintes argumentos:
timedelta([days=0] [, seconds=0] [, microseconds=0] [, milliseconds=0] [, minutes=0] [, hours=0] [, weeks=0])Exemplos de uso:
from datetime import timedelta
three_hours = timedelta(hours=3)
print(three_hours)  # Saída: 3:00:00
three_hours_thirty_minutes = timedelta(hours=3, minutes=30)
print(three_hours_thirty_minutes)  # Saída: 3:30:00
two_days = timedelta(days=2)
print(two_days)  # Saída: 2 days, 0:00:00
two_days_three_hours = timedelta(days=2, hours=3)
print(two_days_three_hours)  # Saída: 2 days, 3:00:00Exemplo de soma de dois dias à data atual:
from datetime import timedelta, datetime
now = datetime.now()
two_days = timedelta(days=2)
in_two_days = now + two_days
print(in_two_days)  # Saída: Data e hora de dois dias no futuroSubtração de 10 horas e 15 minutos da data atual:
from datetime import timedelta, datetime
now = datetime.now()
past_time = now - timedelta(hours=10, minutes=15)
print(past_time)  # Saída: Data e hora de 10 horas e 15 minutos atrásPropriedades de timedelta
A classe timedelta possui as seguintes propriedades:
- days: retorna o número de dias.
- seconds: retorna o número de segundos (não inclui dias).
- microseconds: retorna o número de microssegundos.
- total_seconds(): retorna o número total de segundos, incluindo todos os componentes.
Cálculamos a diferença entre duas datas:
from datetime import timedelta, datetime
now = datetime.now()
future_date = datetime(2028, 12, 25)
period = future_date - now
print("{} dias, {} segundos, {} microssegundos".format(period.days, period.seconds, period.microseconds))
print("Total: {:.0f} segundos".format(period.total_seconds()))Comparação de Datas
Datas podem ser comparadas utilizando os operadores padrão (>, <, ==, etc.):
from datetime import datetime
now = datetime.now()
deadline = datetime(2024, 12, 25)
if now > deadline:
    print("O prazo do projeto já passou")
elif now.date() == deadline.date():
    print("O prazo do projeto é hoje")
else:
    period = deadline - now
    print("Faltam {} dias".format(period.days))Documentação oficial: