Advertisement
JPablos

calcular_edad

Feb 28th, 2025 (edited)
273
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.52 KB | Source Code | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Creado Fri Feb 28 08:33:32 2025
  4.  
  5. Este código utiliza la fecha de nacimiento y la fecha actual (hoy) para calcular la edad
  6. en años + meses + días + horas + minutos + segundos.
  7. Genera un cálculo lo más preciso posible de la edad (hasta la fecha de hoy).
  8. Se ha implementado un control de errores para validar la correcta introdución de datos por
  9. parte del usuario.
  10. """
  11.  
  12. from datetime import datetime
  13. from dateutil.relativedelta import relativedelta
  14.  
  15. # Función para validar el mes
  16. def validar_mes(mes):
  17.     try:
  18.         mes = int(mes)
  19.         if 1 <= mes <= 12:
  20.             return mes
  21.         else:
  22.             print("Error: El mes debe ser un número entre 1 y 12.")
  23.             return None
  24.     except ValueError:
  25.         print("Error: Debes ingresar el mes como un número (por ejemplo, 07 para Julio).")
  26.         return None
  27.  
  28. # Obtener la fecha y hora actual
  29. x = datetime.now()
  30.  
  31. # Solicitar la fecha de nacimiento al usuario
  32. message = "Ingrese su fecha de nacimiento"
  33. print(message)
  34.  
  35. while True:
  36.     A = input("Año : ")
  37.     M = input("Mes : ")
  38.     D = input("Día : ")
  39.     h = input("Hora : ")
  40.     m = input("Minuto : ")
  41.     s = input("Segundo : ")
  42.  
  43.     # Validar el mes
  44.     M_validado = validar_mes(M)
  45.     if M_validado is None:
  46.         continue  # Volver a pedir los datos sí el mes no es válido
  47.  
  48.     # Convertir los demás campos a enteros
  49.     try:
  50.         A = int(A)
  51.         D = int(D)
  52.         h = int(h)
  53.         m = int(m)
  54.         s = int(s)
  55.     except ValueError:
  56.         print("Error: Año, día, hora, minuto y segundo deben ser números enteros.")
  57.         continue  # Volver a pedir los datos sí hay un error
  58.  
  59.     # Validar la fecha
  60.     try:
  61.         y = datetime(A, M_validado, D, h, m, s)
  62.         break  # Salir del bucle sí la fecha es válida
  63.     except ValueError as e:
  64.         if "day is out of range for month" in str(e):
  65.             print("Error: El día está fuera de rango para el mes seleccionado.")
  66.         elif "month must be in 1..12" in str(e):
  67.             print("Error: El mes debe ser un número entre 1 y 12.")
  68.         elif "hour must be in 0..23" in str(e):
  69.             print("Error: La hora debe ser un número entre 0 y 23.")
  70.         elif "minute must be in 0..59" in str(e):
  71.             print("Error: Los minutos deben ser un número entre 0 y 59.")
  72.         elif "second must be in 0..59" in str(e):
  73.             print("Error: Los segundos deben ser un número entre 0 y 59.")
  74.         else:
  75.             print("Error: Fecha o hora inválida. Por favor, ingresa valores correctos.")
  76.  
  77. # Calcular la diferencia de tiempo usando relativedelta
  78. z = relativedelta(x, y)
  79.  
  80. # Obtener el día de la semana en español
  81. dias_semana = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
  82.  
  83. # Día de la semana de la fecha de nacimiento (y)
  84. dia_semana_numero_y = y.weekday()  # weekday() devuelve 0 para Lunes, 1 para Martes, etc.
  85. dia_semana_y = dias_semana[dia_semana_numero_y]
  86.  
  87. # Día de la semana de hoy (x)
  88. dia_semana_numero_x = x.weekday()  # weekday() devuelve 0 para Lunes, 1 para Martes, etc.
  89. dia_semana_x = dias_semana[dia_semana_numero_x]
  90.  
  91. # Mostrar los resultados
  92. print(f"Hoy es {dia_semana_x}:", x.strftime('Día :%d, Mes: %m, Año: %Y, Hora: %H, Minutos: %M, Segundos: %S'))
  93. print(f"Nació un {dia_semana_y}:", y.strftime('Día :%d, Mes: %m, Año: %Y, Hora: %H, Minutos: %M, Segundos: %S'))
  94. print("Ha vivido:", f"{z.years} años, {z.months} meses, {z.days} días, {z.hours} horas, {z.minutes} minutos, {z.seconds} segundos")
  95.  
Advertisement
Comments
  • JPablos
    5 hours (edited)
    # Python 0.48 KB | 0 0
    1. Se usa el método strftime con el formato %A para obtener el nombre del día de la semana en español.
    2. Instalar librería dateutil
    3. pip install python-dateutil
    4. relativedelta es una función de dateutil que calcula la diferencia entre dos fechas en términos de años, meses,as, horas, minutos y segundos, teniendo en cuenta años bisiestos y meses de diferentes duraciones.
    5. El control de errores captura los errores generados y los presenta en español haciéndo más accesible el código.
  • JPablos
    4 hours
    # Bash 0.37 KB | 0 0
    1. Ejemplo de uso:
    2.  
    3. 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á:
    4.  
    5. Hoy es Martes: Día :25, Mes: 02, Año: 2025, Hora: 12, Minutos: 30, Segundos: 45
    6. Nació un Martes: Día :08, Mes: 07, Año: 1958, Hora: 10, Minutos: 15, Segundos: 30
    7. Ha vivido: 66 años, 7 meses, 17as, 2 horas, 15 minutos, 15 segundos
Add Comment
Please, Sign In to add comment
Advertisement