Manipulando Datas - Python
Formatação de Datas e Horas
Em Python, para formatar objetos das classes date
time
strftime(format)
Códigos de formatação mais utilizados:
: abreviação do dia da semana (ex.: "Wed" para "Wednesday").%a
: nome completo do dia da semana (ex.: "Wednesday").%A
: abreviação do mês (ex.: "Oct" para "October").%b
: nome completo do mês (ex.: "October").%B
: dia do mês com dois dígitos, incluindo zero à esquerda, se necessário (ex.: "01").%d
: número do mês com dois dígitos (ex.: "05").%m
: ano com dois dígitos (ex.: "23").%y
: ano com quatro dígitos (ex.: "2023").%Y
: hora no formato de 24 horas (ex.: "13").%H
: hora no formato de 12 horas (ex.: "01").%I
: minutos.%M
: segundos.%S
: microssegundos.%f
: indicador AM/PM.%p
: data e hora formatadas conforme a localidade atual.%c
: data formatada conforme a localidade atual.%x
: hora formatada conforme a localidade atual.%X
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
datetime
A função construtora timedelta
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
: retorna o número de dias.days
: retorna o número de segundos (não inclui dias).seconds
: retorna o número de microssegundos.microseconds
: retorna o número total de segundos, incluindo todos os componentes.total_seconds()
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 (>
<
==
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))