Calcular edad

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Vie Dic 28 11:02:39 CET 2007


En Thu, 27 Dec 2007 14:05:13 -0300, Manuel Enrique González Ramírez  
<maengora en gmail.com> escribió:

> Uso VisualWx y tengo un form con un StaticText llamado fecha de  
> nacimiento
> donde el usuario debe ingresar su fecha de nacimiento
> en el formato aaaa-mm-dd y en otro StaticText debe aparecer la edad.
>
> Lo que he hecho:
> 1) Me funciona desde consola, lo he visto en una web pero no se como
> acloparlo al form que tengo en VisualWx

No tengo ni idea de qué es VisualWx pero trataré de ayudarte con el  
calculo de la edad. Supongo que estas buscando algo que calcule la edad de  
una persona de la forma convencional: es decir, "truncando" siempre para  
abajo. El día del cumpleaños (y no antes) se produce el salto de +1 en el  
numero de años.

> # La fecha de hoy es:
> hoy = datetime.datetime.now().date()

Yo usaría mejor:
hoy = datetime.date.today()

> s = "1976-05-26T00:00:00"
> ayer = hoy + datetime.timedelta(days=-1)
>
> # Y para mañana, sumamos un día
> manana = hoy + datetime.timedelta(days=1)
>
> #cal = datetime.timedelta(fecha) - datetime.timedelta(hoy)

Acá supongo que querias poner algo así:
fecha = strptime(s[:10], "%Y-%m-%d")
cal = hoy - fecha

cal te daría el numero de *días* que vivió esta persona. Que es lo mismo  
que calcula esta otra funcion que usaste:

> def diferencia(date1,date2):
>    d1 = date(int(date1[0:4]),int(date1[5:7]),int(date1[-2:]))
>    d2 = date(int(date2[0:4]),int(date2[5:7]),int(date2[-2:]))
>    dif = d2 - d1
>    return dif.days

El problema es que, conociendo el numero de dias nada mas, no se puede  
saber la edad en años con la convencion de mas arriba (saltar exactamente  
en el cumpleaños). No alcanza con dividir por 365, ni por 365.25; algunos  
se van a enojar si aparecen un año mas viejos antes de tiempo :).

Hace poco me encontre con esta implementacion [1] que hace el cálculo  
"como es usual", y te devuelve la diferencia entre dos fechas en años,  
meses y días completos. En tu caso alcanza con quedarse sólo con los años.  
Suponiendo que el modulo lo guardaste como age.py:

 from age import age
 from datetime import datetime

s = "1976-05-26T00:00:00" # o se obtiene de un formulario, como sea
fechanac = datetime.strptime(s[:10], "%Y-%m-%d").date()
edad = age(fechanac)[0]
print "Si naciste el %s, ahora tienes %d años" % (fechanac, edad)

Una vez que calculaste la edad, mostrarla en el formulario es otro  
problema, pero deberia ser trivial.

[1] http://blog.tkbe.org/archive/python-how-old-are-you/

-- 
Gabriel Genellina

------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es