Atualizado: 04/11/2024

Manipulando Datas - 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))
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com