DEV Community

Madison Junior
Madison Junior

Posted on

Cómo calcular las horas de luz con Python sin usar una API

Cómo calcular las horas de luz con Python sin usar una API

Hace poco estuve repasando algunas operaciones con fechas y horas en Python y encontré un ejemplo bastante práctico: calcular cuánto dura el día a partir de las horas de salida y puesta del Sol.

No necesitamos instalar bibliotecas externas ni conectarnos a ningún servicio. Para este ejercicio, basta con dos horarios y el módulo datetime.

Eso sí, hay una diferencia importante: vamos a calcular la duración entre dos horas conocidas, no a predecir astronómicamente cuándo sale o se pone el Sol.

El problema

Imaginemos que tenemos estos datos:

  • Amanecer: 07:15
  • Puesta del Sol: 18:42

¿Cuántas horas de luz hay entre ambos momentos?

Podríamos hacer la resta manualmente, pero resulta más interesante crear una función reutilizable.

Primera versión con Python

from datetime import datetime

amanecer = "07:15"
atardecer = "18:42"

formato = "%H:%M"

inicio = datetime.strptime(amanecer, formato)
fin = datetime.strptime(atardecer, formato)

duracion = fin - inicio

print(duracion)
Enter fullscreen mode Exit fullscreen mode

El resultado es:

11:27:00
Enter fullscreen mode Exit fullscreen mode

Funciona, pero podemos mejorar la salida para que sea más fácil de leer.

Una función reutilizable

Vamos a encapsular el cálculo y devolver el resultado en horas y minutos.

from datetime import datetime, timedelta

def horas_de_luz(amanecer: str, atardecer: str) -> str:
    formato = "%H:%M"

    inicio = datetime.strptime(amanecer, formato)
    fin = datetime.strptime(atardecer, formato)

    if fin < inicio:
        fin += timedelta(days=1)

    diferencia = fin - inicio

    minutos = int(diferencia.total_seconds() // 60)
    horas, minutos_restantes = divmod(minutos, 60)

    return f"{horas} h {minutos_restantes} min"


print(horas_de_luz("07:15", "18:42"))
print(horas_de_luz("06:30", "20:10"))
Enter fullscreen mode Exit fullscreen mode

Salida:

11 h 27 min
13 h 40 min
Enter fullscreen mode Exit fullscreen mode

La función utiliza strptime() para convertir las cadenas de texto en objetos de fecha y hora.

Después calcula la diferencia y la transforma en minutos.

Con divmod() obtenemos las horas completas y los minutos restantes.

¿Por qué comprobamos si la hora final es menor?

En una resta de horarios puede aparecer un valor negativo cuando el segundo horario corresponde al día siguiente.

La comprobación permite manejar ese caso como un intervalo general.

Sin embargo, para calcular horas reales de luz es preferible trabajar con fechas completas y zonas horarias correctas. Este ejemplo utiliza únicamente horarios simplificados.

Una limitación importante

El programa no conoce la ubicación geográfica.

Tampoco considera la fecha, la latitud ni la longitud. Por eso no puede determinar automáticamente la hora del amanecer.

Si quisiéramos desarrollar una aplicación completa, necesitaríamos incorporar cálculos astronómicos o una fuente externa de datos solares.

Para explorar información relacionada con estos fenómenos, existe el sitio Atardecer de Hoy.

¿Qué podríamos añadir después?

El siguiente paso sería trabajar con fechas reales y objetos datetime que incluyan información de zona horaria.

También podríamos guardar los resultados diarios en un archivo CSV y representar gráficamente cómo cambia la duración del día a lo largo de varios meses.

Sería un proyecto interesante para practicar Python, procesamiento de fechas y visualización de datos sin empezar con una aplicación demasiado compleja.

Conclusión

A veces, un ejercicio pequeño resulta suficiente para practicar conceptos útiles.

En este caso hemos utilizado datetime, operaciones con intervalos y divmod() para resolver un problema cotidiano.

Y lo mejor es que podemos reutilizar la función en otros proyectos que necesiten calcular diferencias entre horarios.

Top comments (0)