Cómo agregar tiempo en Python datetime

PythonBeginner
Practicar Ahora

Introducción

El módulo datetime de Python es una herramienta poderosa para trabajar con fechas y horas. Este tutorial te guiará a través de varios métodos para agregar tiempo a objetos datetime, ayudándote a realizar cálculos de tiempo precisos y flexibles en Python. Aprenderás a usar timedelta para adiciones simples y explorarás ejemplos prácticos de manipulación del tiempo.

Comprendiendo Python Datetime

Antes de agregar tiempo, es importante comprender los componentes fundamentales del módulo datetime.

Componentes Básicos de Datetime

El módulo datetime proporciona varias clases clave:

Clase Descripción
date Representa una fecha (año, mes, día)
time Representa una hora (hora, minuto, segundo)
datetime Combina fecha y hora
timedelta Representa una duración de tiempo

Creando Objetos Datetime

Puedes crear objetos datetime de varias maneras. Veamos cómo hacerlo con un script Python simple.

Abre la terminal integrada en el WebIDE y navega al directorio del proyecto si aún no estás allí.

cd ~/project

Crea un nuevo archivo llamado datetime_basics.py en el directorio ~/project usando el explorador de archivos del WebIDE o la línea de comandos.

touch datetime_basics.py

Abre datetime_basics.py en el editor del WebIDE y agrega el siguiente código:

from datetime import date, time, datetime

## Creando un objeto date
fecha_actual = date.today()
print(f"Fecha actual: {fecha_actual}")

## Creando un objeto time (a partir de datetime actual)
hora_actual = datetime.now().time()
print(f"Hora actual: {hora_actual}")

## Creando un objeto datetime
fecha_hora_actual = datetime.now()
print(f"Fecha y hora actual: {fecha_hora_actual}")

## Creando un objeto datetime específico
fecha_hora_especifica = datetime(2023, 6, 15, 14, 30, 45)
print(f"Fecha y hora específica: {fecha_hora_especifica}")

Guarda el archivo. Ahora, ejecuta el script desde la terminal:

python datetime_basics.py

Verás una salida similar a esta:

Fecha actual: YYYY-MM-DD
Hora actual: HH:MM:SS.microsegundos
Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora específica: 2023-06-15 14:30:45

Esto muestra cómo crear objetos date, time y datetime básicos.

Atributos Clave de Datetime

Los objetos datetime tienen atributos como year, month, day, hour, minute y second a los que puedes acceder.

Agreguemos a nuestro script datetime_basics.py para demostrar cómo acceder a estos atributos.

Abre datetime_basics.py de nuevo y agrega las siguientes líneas al final:

print(f"Año: {fecha_hora_especifica.year}")
print(f"Mes: {fecha_hora_especifica.month}")
print(f"Día: {fecha_hora_especifica.day}")
print(f"Hora: {fecha_hora_especifica.hour}")
print(f"Minuto: {fecha_hora_especifica.minute}")
print(f"Segundo: {fecha_hora_especifica.second}")

Guarda el archivo y ejecútalo de nuevo:

python datetime_basics.py

La salida ahora incluirá los componentes individuales de fecha_hora_especifica:

Fecha actual: YYYY-MM-DD
Hora actual: HH:MM:SS.microsegundos
Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora específica: 2023-06-15 14:30:45
Año: 2023
Mes: 6
Día: 15
Hora: 14
Minuto: 30
Segundo: 45

Comprender estos fundamentos es el primer paso para realizar adiciones de tiempo.

Adición de Tiempo con timedelta

La forma más común de agregar tiempo a un objeto datetime en Python es utilizando la clase timedelta. Un objeto timedelta representa una duración.

Creación de Objetos timedelta

Puedes crear objetos timedelta utilizando diversas unidades de tiempo como días, horas, minutos, segundos, milisegundos y microsegundos.

Vamos a crear un nuevo script Python para explorar timedelta.

Crea un nuevo archivo llamado time_addition.py en el directorio ~/project.

touch time_addition.py

Abre time_addition.py y agrega el siguiente código:

from datetime import datetime, timedelta

## Obtener la fecha y hora actual
fecha_hora_actual = datetime.now()
print(f"Fecha y hora actual: {fecha_hora_actual}")

## Crear un timedelta de 5 días
cinco_dias = timedelta(days=5)
print(f"Timedelta de 5 días: {cinco_dias}")

## Crear un timedelta de 3 horas y 30 minutos
tres_horas_treinta_minutos = timedelta(hours=3, minutes=30)
print(f"Timedelta de 3 horas 30 minutos: {tres_horas_treinta_minutos}")

## Crear un timedelta de 1 semana y 2 días
una_semana_dos_dias = timedelta(weeks=1, days=2)
print(f"Timedelta de 1 semana 2 días: {una_semana_dos_dias}")

Guarda el archivo y ejecútalo:

python time_addition.py

La salida mostrará la fecha y hora actual y los objetos timedelta creados:

Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Timedelta de 5 días: 5 días, 0:00:00
Timedelta de 3 horas 30 minutos: 3:30:00
Timedelta de 1 semana 2 días: 9 días, 0:00:00

Observa que timedelta(weeks=1, days=2) se representa como 9 días. timedelta normaliza la duración en días, segundos y microsegundos.

Agregar timedelta a datetime

Puedes agregar un objeto timedelta a un objeto datetime para obtener un nuevo objeto datetime que represente un punto futuro en el tiempo.

Agreguemos código a time_addition.py para realizar la adición de tiempo.

Abre time_addition.py y agrega las siguientes líneas al final:

## Agregar 5 días a la fecha y hora actual
fecha_hora_futura_dias = fecha_hora_actual + cinco_dias
print(f"Fecha y hora después de agregar 5 días: {fecha_hora_futura_dias}")

## Agregar 3 horas y 30 minutos a la fecha y hora actual
fecha_hora_futura_horas_minutos = fecha_hora_actual + tres_horas_treinta_minutos
print(f"Fecha y hora después de agregar 3 horas 30 minutos: {fecha_hora_futura_horas_minutos}")

## Agregar 1 semana y 2 días a la fecha y hora actual
fecha_hora_futura_semana_dias = fecha_hora_actual + una_semana_dos_dias
print(f"Fecha y hora después de agregar 1 semana 2 días: {fecha_hora_futura_semana_dias}")

Guarda el archivo y ejecútalo:

python time_addition.py

La salida ahora mostrará la fecha y hora original y las fechas y horas resultantes después de agregar los objetos timedelta:

Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Timedelta de 5 días: 5 días, 0:00:00
Timedelta de 3 horas 30 minutos: 3:30:00
Timedelta de 1 semana 2 días: 9 días, 0:00:00
Fecha y hora después de agregar 5 días: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 3 horas 30 minutos: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 1 semana 2 días: YYYY-MM-DD HH:MM:SS.microsegundos

La salida muestra los nuevos valores de fecha y hora después de las adiciones. Esto demuestra el uso básico de timedelta para agregar tiempo.

Cálculos de Tiempo Prácticos

timedelta es muy útil para cálculos de tiempo prácticos, como encontrar una fecha en el futuro o calcular la duración entre dos puntos en el tiempo.

Cálculo de Fechas Futuras

Puedes calcular fácilmente una fecha un cierto número de días, semanas o incluso años en el futuro (convirtiendo los años a días).

Agreguemos una función a time_addition.py para calcular una fecha futura.

Abre time_addition.py y agrega la siguiente definición de función y su uso al final:

def get_future_date(fecha_inicio, dias_a_agregar):
    """Calcula una fecha futura sumando un número de días."""
    fecha_futura = fecha_inicio + timedelta(days=dias_a_agregar)
    return fecha_futura

## Ejemplo: Encuentra la fecha 30 días a partir de ahora
treinta_dias_a_partir_de_ahora = get_future_date(datetime.now(), 30)
print(f"Fecha 30 días a partir de ahora: {treinta_dias_a_partir_de_ahora}")

Guarda el archivo y ejecútalo:

python time_addition.py

La salida ahora incluirá la fecha 30 días a partir de la fecha actual:

Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Timedelta de 5 días: 5 días, 0:00:00
Timedelta de 3 horas 30 minutos: 3:30:00
Timedelta de 1 semana 2 días: 9 días, 0:00:00
Fecha y hora después de agregar 5 días: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 3 horas 30 minutos: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 1 semana 2 días: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha 30 días a partir de ahora: YYYY-MM-DD HH:MM:SS.microsegundos

Cálculo de Diferencias de Tiempo

También puedes restar un objeto datetime de otro para obtener un objeto timedelta que represente la duración entre ellos.

Agreguemos código a time_addition.py para calcular la diferencia entre dos fechas.

Abre time_addition.py y agrega el siguiente código al final:

## Calcula la diferencia entre dos datetime específicos
fecha1 = datetime(2023, 1, 1)
fecha2 = datetime(2023, 12, 31)

diferencia_tiempo = fecha2 - fecha1
print(f"Diferencia entre {fecha1} y {fecha2}: {diferencia_tiempo}")

## Accede a los componentes de la diferencia timedelta
print(f"Diferencia en días: {diferencia_tiempo.days}")
print(f"Diferencia total en segundos: {diferencia_tiempo.total_seconds()}")

Guarda el archivo y ejecútalo:

python time_addition.py

La salida mostrará la diferencia entre las dos fechas:

Fecha y hora actual: YYYY-MM-DD HH:MM:SS.microsegundos
Timedelta de 5 días: 5 días, 0:00:00
Timedelta de 3 horas 30 minutos: 3:30:00
Timedelta de 1 semana 2 días: 9 días, 0:00:00
Fecha y hora después de agregar 5 días: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 3 horas 30 minutos: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha y hora después de agregar 1 semana 2 días: YYYY-MM-DD HH:MM:SS.microsegundos
Fecha 30 días a partir de ahora: YYYY-MM-DD HH:MM:SS.microsegundos
Diferencia entre 2023-01-01 00:00:00 y 2023-12-31 00:00:00: 364 días, 0:00:00
Diferencia en días: 364
Diferencia total en segundos: 31449600.0

Esto demuestra cómo timedelta se utiliza tanto para agregar tiempo como para calcular la duración entre dos puntos en el tiempo. Estas son operaciones fundamentales para muchas aplicaciones basadas en tiempo.

Resumen

En este laboratorio, has aprendido los fundamentos del módulo datetime de Python, incluyendo la creación de objetos date, time y datetime. Has explorado cómo usar la clase timedelta para representar duraciones y cómo agregar objetos timedelta a objetos datetime para realizar sumas de tiempo. También has practicado cálculos de tiempo prácticos, como encontrar fechas futuras y calcular la diferencia entre dos instantes de tiempo. Estas habilidades son esenciales para manejar operaciones basadas en tiempo en tus programas Python.