Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Creado Fri Feb 28 08:33:32 2025
- Este código utiliza la fecha de nacimiento y la fecha actual (hoy) para calcular la edad
- en años + meses + días + horas + minutos + segundos.
- Genera un cálculo lo más preciso posible de la edad (hasta la fecha de hoy).
- Se ha implementado un control de errores para validar la correcta introdución de datos por
- parte del usuario.
- """
- from datetime import datetime
- from dateutil.relativedelta import relativedelta
- # Función para validar el mes
- def validar_mes(mes):
- try:
- mes = int(mes)
- if 1 <= mes <= 12:
- return mes
- else:
- print("Error: El mes debe ser un número entre 1 y 12.")
- return None
- except ValueError:
- print("Error: Debes ingresar el mes como un número (por ejemplo, 07 para Julio).")
- return None
- # Obtener la fecha y hora actual
- x = datetime.now()
- # Solicitar la fecha de nacimiento al usuario
- message = "Ingrese su fecha de nacimiento"
- print(message)
- while True:
- A = input("Año : ")
- M = input("Mes : ")
- D = input("Día : ")
- h = input("Hora : ")
- m = input("Minuto : ")
- s = input("Segundo : ")
- # Validar el mes
- M_validado = validar_mes(M)
- if M_validado is None:
- continue # Volver a pedir los datos sí el mes no es válido
- # Convertir los demás campos a enteros
- try:
- A = int(A)
- D = int(D)
- h = int(h)
- m = int(m)
- s = int(s)
- except ValueError:
- print("Error: Año, día, hora, minuto y segundo deben ser números enteros.")
- continue # Volver a pedir los datos sí hay un error
- # Validar la fecha
- try:
- y = datetime(A, M_validado, D, h, m, s)
- break # Salir del bucle sí la fecha es válida
- except ValueError as e:
- if "day is out of range for month" in str(e):
- print("Error: El día está fuera de rango para el mes seleccionado.")
- elif "month must be in 1..12" in str(e):
- print("Error: El mes debe ser un número entre 1 y 12.")
- elif "hour must be in 0..23" in str(e):
- print("Error: La hora debe ser un número entre 0 y 23.")
- elif "minute must be in 0..59" in str(e):
- print("Error: Los minutos deben ser un número entre 0 y 59.")
- elif "second must be in 0..59" in str(e):
- print("Error: Los segundos deben ser un número entre 0 y 59.")
- else:
- print("Error: Fecha o hora inválida. Por favor, ingresa valores correctos.")
- # Calcular la diferencia de tiempo usando relativedelta
- z = relativedelta(x, y)
- # Obtener el día de la semana en español
- dias_semana = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
- # Día de la semana de la fecha de nacimiento (y)
- dia_semana_numero_y = y.weekday() # weekday() devuelve 0 para Lunes, 1 para Martes, etc.
- dia_semana_y = dias_semana[dia_semana_numero_y]
- # Día de la semana de hoy (x)
- dia_semana_numero_x = x.weekday() # weekday() devuelve 0 para Lunes, 1 para Martes, etc.
- dia_semana_x = dias_semana[dia_semana_numero_x]
- # Mostrar los resultados
- print(f"Hoy es {dia_semana_x}:", x.strftime('Día :%d, Mes: %m, Año: %Y, Hora: %H, Minutos: %M, Segundos: %S'))
- print(f"Nació un {dia_semana_y}:", y.strftime('Día :%d, Mes: %m, Año: %Y, Hora: %H, Minutos: %M, Segundos: %S'))
- print("Ha vivido:", f"{z.years} años, {z.months} meses, {z.days} días, {z.hours} horas, {z.minutes} minutos, {z.seconds} segundos")
Advertisement
Comments
-
- Se usa el método strftime con el formato %A para obtener el nombre del día de la semana en español.
- Instalar librería dateutil
- pip install python-dateutil
- relativedelta es una función de dateutil que calcula la diferencia entre dos fechas en términos de años, meses, días, horas, minutos y segundos, teniendo en cuenta años bisiestos y meses de diferentes duraciones.
- El control de errores captura los errores generados y los presenta en español haciéndo más accesible el código.
-
- Ejemplo de uso:
- Si hoy es 25-02-2025 12:30:45 (un Martes) y la fecha de nacimiento es 08-07-1958 10:15:30 (un Martes), la salida será:
- Hoy es Martes: Día :25, Mes: 02, Año: 2025, Hora: 12, Minutos: 30, Segundos: 45
- Nació un Martes: Día :08, Mes: 07, Año: 1958, Hora: 10, Minutos: 15, Segundos: 30
- Ha vivido: 66 años, 7 meses, 17 días, 2 horas, 15 minutos, 15 segundos
Add Comment
Please, Sign In to add comment
Advertisement