Cómo calcular la diferencia horaria en Python

Cuando trabaje con fechas y horas en Python, a menudo necesitará calcular la diferencia horaria. En este tutorial, aprenderá a calcular la diferencia entre dos marcas de tiempo en horas, minutos y segundos.

Al final de este tutorial, habrás aprendido:

  • cómo usar el módulo de fecha y hora de Python para trabajar con fechas y horas,
  • qué son los objetos timedelta, y cómo son útiles, y
  • calcule la diferencia de tiempo entre dos marcas de tiempo, en horas, minutos y segundos.

Empecemos.

Cómo usar el módulo de fecha y hora de Python

Para trabajar con fechas y horas en Python, utilizará el módulo de fecha y hora. El módulo de fecha y hora es parte de la biblioteca estándar de Python. De modo que puede seguir adelante e importarlo a su entorno de trabajo de inmediato, así:

import datetime

Para calcular la diferencia horaria, debe crear dos marcas de tiempo diferentes. Puedes elegir crear:

  • dos objetos de fecha,
  • dos objetos de tiempo, o
  • una combinación de fecha y hora: objetos de fecha y hora.

Cómo crear un objeto de fecha en Python

Importemos la clase de fecha del módulo de fecha y hora. Para crear un objeto de fecha en Python, puede usar la sintaxis general datetime.date(,,). Aquí hay un ejemplo de cómo crear un objeto de fecha date1:

from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)

# Output: 2022-03-27

Puede probar el código en el compilador de Python kirukiru.es para probar. O instala Python en tu computadora.

Como se muestra arriba, cuando imprime la fecha, tiene el formato AAAA-MM-DD para las fechas.

Nota: asegúrese de especificar el mes como un número entero sin ceros a la izquierda. Es probable que esté acostumbrado a agregar un cero inicial al mes cuando escribe fechas.

Por ejemplo, para especificar una fecha en junio, el sexto mes del año: use 6 y no 06.

Por ejemplo, intente ejecutar el siguiente fragmento de código, donde el mes se mencionó como 03 en lugar de solo 3. Verá que arroja un error de sintaxis como se muestra:

date1 = datetime.date(2022,03,27)

print(date1)

# Error Message
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Veamos ahora cómo crear un objeto de tiempo en Python.

Cómo crear un objeto de tiempo en Python

Para crear un objeto de tiempo, importemos la clase de tiempo. Cualquier objeto de tiempo de Python se puede crear utilizando la clase de tiempo especificando los siguientes atributos de clase: hora, minuto, segundo y microsegundo.

Sin embargo, todos estos atributos son opcionales. Si no especifica un determinado atributo, por ejemplo, en segundo lugar, se establece en 0 de forma predeterminada.

El siguiente fragmento de código muestra cómo puede crear un objeto de tiempo time1. Al igual que con el objeto de fecha, puede imprimir el objeto de hora para ver la hora formateada.

from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)

# Output: 13:27:45.004600

Cómo crear un objeto de fecha y hora en Python

Como puede ver, el objeto de fecha no tiene información sobre la hora. Y el objeto de tiempo no contiene información sobre la fecha.

Sin embargo, en la práctica, necesitará la información de la fecha y la hora. Por lo tanto, se recomienda utilizar la clase de fecha y hora en su lugar.

Puede acceder a la clase de fecha y hora y crear objetos de fecha y hora en Python, como se muestra a continuación:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)

# Output: 2022-03-27 13:27:45.046000

Ahora vamos a crear otro objeto de fecha y hora dt2 sin el segundo atributo. Puede ver que está establecido en 0, el valor predeterminado.

dt2 = datetime.datetime(2022,6,30,14,28)
print(dt2)

# Output: 2022-06-30 14:28:00

Hasta ahora ha aprendido a crear marcas de tiempo en Python, como fechas, horas y fechas y horas. Ahora es el momento de ver cómo puede calcular la diferencia entre dos marcas de tiempo.

Dirígete a la siguiente sección para averiguarlo.

Cómo usar el objeto timedelta en Python

En Python, timedelta denota un lapso de tiempo. Es la diferencia entre dos objetos de fecha, hora o fecha y hora.

Si agrega o resta dos objetos de fecha, hora o fecha y hora, obtendrá un objeto timedelta. Este objeto timedelta tiene atributos y métodos útiles que pueden ayudar a calcular la diferencia horaria.

Avancemos y calculemos la diferencia entre los dos objetos de fecha y hora dt1 y dt2.

dt1 = datetime.datetime(2022,3,27,13,27,45,46000) 
dt2 = datetime.datetime(2022,6,30,14,28) 
tdelta = dt2 - dt1 
print(tdelta) 
print(type(tdelta)) 

# Output 
95 days, 1:00:14.954000 
<class 'datetime.timedelta'>

En el fragmento de código anterior, puede ver que la variable tdelta contiene la diferencia de tiempo entre dt1 y dt2. Y se verifica que el tipo de tdelta es de la clase timedelta usando el integrado de Python escribe() función.

Ahora codifiquemos otro ejemplo.

Cómo encontrar la diferencia horaria entre dos fechas

Tomemos un ejemplo simple pero interesante.

Problema: Calcular la diferencia horaria entre la fecha actual (hoy) y tu cumpleaños.
Para hacer esto, configure hoy como la primera marca de tiempo y su cumpleaños como la segunda marca de tiempo.

Como primer paso, vamos a crear dos objetos de fecha y hora:

  • uno para hoy, llamémoslo hoy, y
  • otro para tu cumpleaños, llamémoslo cumpleaños

La clase datetime tiene el método now() que le brinda la fecha y hora local actual. Así que usémoslo hoy, nuestra fecha de referencia.

today = datetime.datetime.now()
print(today)

# Sample Output: 2022-01-22 09:10:18.489538

En el código a continuación, reemplace bday con su cumpleaños para calcular el tiempo restante para su cumpleaños este año.

Si está leyendo esto después de que haya pasado su cumpleaños, siéntase libre de establecer el día de su próximo cumpleaños.

bday = datetime.datetime(2022,8,30,11,59)
print(bday)

# Sample Output: 2022-08-30 11:59:00

El siguiente paso es calcular time_diff que es un objeto timedleta, como se explicó anteriormente. Simplemente reste hoy de su cumpleaños y obtendrá la diferencia horaria.

time_diff = bday - today
print(f"Your birthday is in {time_diff}")

# Output
Your birthday is in 220 days, 2:46:00.127416

Para saber el número de días restantes, use el atributo de días en time_diff, como se muestra:

tdays = time_diff.days
print(f"Your birthday is in {tdays} days.")

# Output
Your birthday is in 220 days.

Cómo encontrar la diferencia de tiempo en segundos

Calculemos ahora a cuántos segundos falta tu cumpleaños.

Para calcular la diferencia de tiempo total en segundos, utilice el método total_seconds() en el objeto timedelta time_diff.

tsecs = time_diff.total_seconds()
print(f"Your birthday is {tsecs} seconds away.")

# Output
Your birthday is 19017960.127416 seconds away.

Bueno, ¡esa es una espera demasiado larga!

Dicho esto, ahora sabe cómo calcular la diferencia de tiempo entre dos marcas de tiempo en segundos.

Ahora revisemos algunos conceptos básicos y escribamos lo siguiente. Un día se compone de 24 horas, una hora tiene una duración de 60 minutos y 60 segundos componen un minuto.

Esto se resume en la siguiente imagen:

Horas, Minutos y Segundos

Entonces, para convertir de segundos a minutos, horas y días, puede usar la siguiente tabla y dividir por el factor de conversión correspondiente.

Tabla de conversión de tiempo

En las siguientes secciones, convertiremos la diferencia horaria en segundos a minutos y horas.

Cómo encontrar la diferencia horaria en minutos

Para obtener la diferencia horaria en minutos, solo necesitas dividir el total de segundos por 60.

Dividamos tsecs por 60 y almacenémoslo en una variable llamada tmins, así:

tmins = tsecs/60
print(f"Your birthday is {tmins} minutes away.")

# Output
Your birthday is 316966.0021236 minutes away.

Cómo encontrar la diferencia horaria en horas

Ahora que ha calculado la diferencia horaria en minutos, puede dividirla por un factor de 60 para obtener la diferencia en horas. O podrías dividir el total de segundos por 60*60 = 3600.

thrs = tsecs/(60*60)
print(f"Your birthday is {thrs} hours away.")

# Output
Your birthday is 5282.76670206 hours away.

Ahora ha aprendido a calcular la diferencia horaria en cualquier unidad de su elección.

Conclusión

En este tutorial, ha aprendido cómo:

  • crear y trabajar con fechas y horas usando el módulo datetime de Python,
  • use objetos timedelta para obtener un lapso de tiempo, o diferencia de tiempo, y
  • calcular la diferencia horaria en segundos, minutos y horas.

Espero que hayas encontrado útil este tutorial. Ahora que sabe todo sobre el cálculo de la diferencia horaria en Python, es hora de poner en práctica sus habilidades.

¡Feliz aprendizaje y codificación!

Aprende a escribir código igual o no igual o haz un juego de serpientes en python aquí.