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