Como adicionar tempo em Python datetime

PythonBeginner
Pratique Agora

Introdução

O módulo datetime do Python é uma ferramenta poderosa para trabalhar com datas e horas. Este tutorial irá guiá-lo através de vários métodos de adição de tempo a objetos datetime, ajudando-o a realizar cálculos de tempo precisos e flexíveis em Python. Você aprenderá como usar timedelta para adições simples e explorará exemplos práticos de manipulação de tempo.

Compreendendo o Módulo Datetime do Python

Antes de adicionar tempo, é importante compreender os componentes fundamentais do módulo datetime.

Componentes Principais do Datetime

O módulo datetime fornece várias classes-chave:

Classe Descrição
date Representa uma data (ano, mês, dia)
time Representa um horário (hora, minuto, segundo)
datetime Combina data e horário
timedelta Representa uma duração de tempo

Criando Objetos Datetime

Você pode criar objetos datetime de várias maneiras. Vamos criar um script Python simples para ver como.

Abra o terminal integrado no WebIDE e navegue até o diretório do projeto, se ainda não estiver lá.

cd ~/project

Crie um novo arquivo chamado datetime_basics.py no diretório ~/project usando o explorador de arquivos do WebIDE ou a linha de comando.

touch datetime_basics.py

Abra datetime_basics.py no editor do WebIDE e adicione o seguinte código:

from datetime import date, time, datetime

## Criando um objeto date
data_atual = date.today()
print(f"Data atual: {data_atual}")

## Criando um objeto time (a partir do datetime atual)
hora_atual = datetime.now().time()
print(f"Hora atual: {hora_atual}")

## Criando um objeto datetime
datetime_atual = datetime.now()
print(f"Datetime atual: {datetime_atual}")

## Criando um objeto datetime específico
datetime_especifico = datetime(2023, 6, 15, 14, 30, 45)
print(f"Datetime específico: {datetime_especifico}")

Salve o arquivo. Agora, execute o script do terminal:

python datetime_basics.py

Você verá uma saída semelhante a esta:

Data atual: YYYY-MM-DD
Hora atual: HH:MM:SS.microseconds
Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Datetime específico: 2023-06-15 14:30:45

Isso demonstra como criar objetos date, time e datetime básicos.

Atributos Principais do Datetime

Objetos datetime possuem atributos como year, month, day, hour, minute e second que você pode acessar.

Vamos adicionar ao nosso script datetime_basics.py para demonstrar o acesso a esses atributos.

Abra datetime_basics.py novamente e adicione as seguintes linhas no final:

print(f"Ano: {datetime_especifico.year}")
print(f"Mês: {datetime_especifico.month}")
print(f"Dia: {datetime_especifico.day}")
print(f"Hora: {datetime_especifico.hour}")
print(f"Minuto: {datetime_especifico.minute}")
print(f"Segundo: {datetime_especifico.second}")

Salve o arquivo e execute-o novamente:

python datetime_basics.py

A saída agora incluirá os componentes individuais do datetime_especifico:

Data atual: YYYY-MM-DD
Hora atual: HH:MM:SS.microseconds
Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Datetime específico: 2023-06-15 14:30:45
Ano: 2023
Mês: 6
Dia: 15
Hora: 14
Minuto: 30
Segundo: 45

Compreender esses fundamentos é o primeiro passo para realizar adições de tempo.

Adicionando Tempo com timedelta

A maneira mais comum de adicionar tempo a um objeto datetime em Python é usando a classe timedelta. Um objeto timedelta representa uma duração.

Criando Objetos timedelta

Você pode criar objetos timedelta usando várias unidades de tempo, como dias, horas, minutos, segundos, milissegundos e microsegundos.

Vamos criar um novo script Python para explorar timedelta.

Crie um novo arquivo chamado time_addition.py no diretório ~/project.

touch time_addition.py

Abra time_addition.py e adicione o seguinte código:

from datetime import datetime, timedelta

## Obter o datetime atual
datetime_atual = datetime.now()
print(f"Datetime atual: {datetime_atual}")

## Criar um timedelta de 5 dias
cinco_dias = timedelta(days=5)
print(f"Timedelta de 5 dias: {cinco_dias}")

## Criar um timedelta de 3 horas e 30 minutos
tres_horas_trinta_minutos = timedelta(hours=3, minutes=30)
print(f"Timedelta de 3 horas e 30 minutos: {tres_horas_trinta_minutos}")

## Criar um timedelta de 1 semana e 2 dias
uma_semana_dois_dias = timedelta(weeks=1, days=2)
print(f"Timedelta de 1 semana e 2 dias: {uma_semana_dois_dias}")

Salve o arquivo e execute-o:

python time_addition.py

A saída mostrará o datetime atual e os objetos timedelta criados:

Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Timedelta de 5 dias: 5 days, 0:00:00
Timedelta de 3 horas e 30 minutos: 3:30:00
Timedelta de 1 semana e 2 dias: 9 days, 0:00:00

Observe que timedelta(weeks=1, days=2) é representado como 9 days. timedelta normaliza a duração em dias, segundos e microsegundos.

Adicionando timedelta a datetime

Você pode adicionar um objeto timedelta a um objeto datetime para obter um novo objeto datetime representando um ponto futuro no tempo.

Vamos adicionar código a time_addition.py para realizar a adição de tempo.

Abra time_addition.py e adicione as seguintes linhas no final:

## Adicionar 5 dias ao datetime atual
datetime_futuro_dias = datetime_atual + cinco_dias
print(f"Datetime após adicionar 5 dias: {datetime_futuro_dias}")

## Adicionar 3 horas e 30 minutos ao datetime atual
datetime_futuro_horas_minutos = datetime_atual + tres_horas_trinta_minutos
print(f"Datetime após adicionar 3 horas e 30 minutos: {datetime_futuro_horas_minutos}")

## Adicionar 1 semana e 2 dias ao datetime atual
datetime_futuro_semana_dias = datetime_atual + uma_semana_dois_dias
print(f"Datetime após adicionar 1 semana e 2 dias: {datetime_futuro_semana_dias}")

Salve o arquivo e execute-o:

python time_addition.py

A saída agora mostrará o datetime original e os datetimes resultantes após a adição dos objetos timedelta:

Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Timedelta de 5 dias: 5 days, 0:00:00
Timedelta de 3 horas e 30 minutos: 3:30:00
Timedelta de 1 semana e 2 dias: 9 days, 0:00:00
Datetime após adicionar 5 dias: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 3 horas e 30 minutos: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 1 semana e 2 dias: YYYY-MM-DD HH:MM:SS.microseconds

A saída mostra os novos valores de datetime após as adições. Isso demonstra o uso básico de timedelta para adicionar tempo.

Cálculos Práticos de Tempo

timedelta é muito útil para cálculos práticos de tempo, como encontrar uma data futura ou calcular a duração entre dois pontos no tempo.

Calculando Datas Futuras

Você pode facilmente calcular uma data um determinado número de dias, semanas ou até anos no futuro (convertendo anos em dias).

Vamos adicionar uma função a time_addition.py para calcular uma data futura.

Abra time_addition.py e adicione a seguinte definição de função e uso no final:

def get_future_date(start_date, days_to_add):
    """Calcula uma data futura adicionando um número de dias."""
    future_date = start_date + timedelta(days=days_to_add)
    return future_date

## Exemplo: Encontre a data em 30 dias a partir de agora
trinta_dias_a_partir_de_agora = get_future_date(datetime.now(), 30)
print(f"Data em 30 dias a partir de agora: {trinta_dias_a_partir_de_agora}")

Salve o arquivo e execute-o:

python time_addition.py

A saída agora incluirá a data em 30 dias a partir da data atual:

Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Timedelta de 5 dias: 5 days, 0:00:00
Timedelta de 3 horas e 30 minutos: 3:30:00
Timedelta de 1 semana e 2 dias: 9 days, 0:00:00
Datetime após adicionar 5 dias: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 3 horas e 30 minutos: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 1 semana e 2 dias: YYYY-MM-DD HH:MM:SS.microseconds
Data em 30 dias a partir de agora: YYYY-MM-DD HH:MM:SS.microseconds

Calculando Diferenças de Tempo

Você também pode subtrair um objeto datetime de outro para obter um objeto timedelta representando a duração entre eles.

Vamos adicionar código a time_addition.py para calcular a diferença entre duas datas.

Abra time_addition.py e adicione o seguinte código no final:

## Calcular a diferença entre dois datetimes específicos
data1 = datetime(2023, 1, 1)
data2 = datetime(2023, 12, 31)

diferenca_tempo = data2 - data1
print(f"Diferença entre {data1} e {data2}: {diferenca_tempo}")

## Acessar componentes da diferença timedelta
print(f"Diferença em dias: {diferenca_tempo.days}")
print(f"Diferença total em segundos: {diferenca_tempo.total_seconds()}")

Salve o arquivo e execute-o:

python time_addition.py

A saída mostrará a diferença entre as duas datas:

Datetime atual: YYYY-MM-DD HH:MM:SS.microseconds
Timedelta de 5 dias: 5 days, 0:00:00
Timedelta de 3 horas e 30 minutos: 3:30:00
Timedelta de 1 semana e 2 dias: 9 days, 0:00:00
Datetime após adicionar 5 dias: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 3 horas e 30 minutos: YYYY-MM-DD HH:MM:SS.microseconds
Datetime após adicionar 1 semana e 2 dias: YYYY-MM-DD HH:MM:SS.microseconds
Data em 30 dias a partir de agora: YYYY-MM-DD HH:MM:SS.microseconds
Diferença entre 2023-01-01 00:00:00 e 2023-12-31 00:00:00: 364 days, 0:00:00
Diferença em dias: 364
Diferença total em segundos: 31449600.0

Isso demonstra como timedelta é usado tanto para adicionar tempo quanto para calcular a duração entre dois pontos no tempo. Essas são operações fundamentais para muitas aplicações baseadas em tempo.

Resumo

Neste laboratório, você aprendeu os fundamentos do módulo datetime do Python, incluindo a criação de objetos date, time e datetime. Explorou como usar a classe timedelta para representar durações e como adicionar objetos timedelta a objetos datetime para realizar adições de tempo. Também praticou cálculos práticos de tempo, como encontrar datas futuras e calcular a diferença entre duas datas e horários. Essas habilidades são essenciais para lidar com operações baseadas em tempo em seus programas Python.