Vamos a resolver un ejercicio en Python que pide la fecha de nacimiento de una persona y a partir de ella indica cuántos días, horas, minutos y segundos lleva viviendo al momento de ejecutar el script.
Para ello usaremos a datetime
y haremos operaciones con fechas, algo relativamente sencillo.
También vamos a usar la función divmod para convertir los segundos a horas y minutos.
Nota: el código de la captura fue ejecutado el 25 de marzo a las 11 de la noche con 30 minutos.
Necesitamos importar el módulo de datetime con import datetime
.
Para solicitar la fecha de nacimiento de la persona se usa la función input con int
para convertir la cadena a entero; se pide por separado el año, mes y día.
Para crear un timedelta usamos la función datetime.datetime
, le pasamos en orden el año, mes y día. Si no especificamos las horas, minutos y segundos se supone que están en cero.
Cuando ya tenemos el timedelta de la fecha de nacimiento ahora creamos un timedelta actual, es decir, la fecha y hora de hoy. Para ello usamos datetime.datetime.now()
.
Finalmente, para obtener la diferencia restamos:
diferencia = fecha_de_hoy - fecha_de_nacimiento
Eso dará una diferencia que tiene los días y los segundos (también los microsegundos) como se especifica en la documentación oficial.
Como ya lo dije anteriormente, el timedelta no tiene horas ni minutos, solamente segundos.
Entonces usamos a divmod para convertir segundos a horas, y el sobrante lo convertimos a minutos, al final el residuo de todo ello son los segundos que restan.
Una vez explicada la solución al algoritmo no queda más que poner el código:
"""
Crea un programa en python que solicite la fecha de nacimiento del usuario y le
devuelva la cantidad de días, horas, minutos y segundos que ha vivido hasta hoy.
Nota: este programa toma la zona horaria local; si lo ejecutas en línea
tomará la hora del servidor
Nota 2: si no entiendes la función divmod, mira este post:
@author parzibyte
"""
import datetime
# Necesitamos el día, mes y año
dia = int(input("Día de nacimiento: "))
mes = int(input("Mes de nacimiento: "))
anio = int(input("Año de nacimiento: "))
# Crear un objeto de tipo datetime.datetime; con horas, minutos y segundos en 0
fecha_de_nacimiento = datetime.datetime(anio, mes, dia)
# Necesitamos la fecha y hora de hoy...
fecha_de_hoy = datetime.datetime.now()
# Operar como si fueran simples números
diferencia = fecha_de_hoy - fecha_de_nacimiento
# Y ahora podemos acceder a cada valor por separado ;)
# Es un objeto timedelta: https://docs.python.org/3/library/datetime.html#timedelta-objects
dias_vividos = diferencia.days
# Para los minutos y horas es distinto
segundos_vividos = diferencia.seconds
# Convertir segundos a horas y obtener sobrante
horas_vividas, segundos_vividos = divmod(segundos_vividos, 3600)
# Convertir segundos sobrantes a minutos y obtener sobrante
minutos_vividos, segundos_vividos = divmod(segundos_vividos, 60)
# Preparar un mensaje
mensaje = "Has vivido {} día(s), {} hora(s), {} minuto(s) y {} segundo(s)".format(
dias_vividos, horas_vividas, minutos_vividos, segundos_vividos)
# Imprimirlo y listo
print(mensaje)
Cuando ya hemos calculado todo lo que requiere el algoritmo simplemente imprimimos. Falta pulir algunas cosas como los plurales pero eso es algo sencillo.
Puedes descargar el código que dejé arriba; antes de ello asegúrate de instalar Python en Windows o en Android.
Te invito a ver más sobre:
Con eso terminamos por hoy.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios
hola, me pudras ayudar?
tengo un trabajo que es:
hacer un programa que determine los años, meses, dias, horas y minutos
Claro, envíeme su solicitud en https://parzibyte.me/#contacto