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 AM
Por 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:00
Exemplo 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 futuro
Subtraçã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ás
Propriedades 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: