Calcular edad
Chema Cortes
py en ch3m4.org
Dom Dic 30 17:14:08 CET 2007
El Sunday 30 December 2007 16:28:17 Manuel Enrique González Ramírez escribió:
> Gracias amigos.
>
> Ambas respuestas funcionan correctamente, pero teniendo en cuento que soy
> un notavo en la programacion, me quedare con la mas sencilla.
Tan sólo he de decirte que las dos soluciones que puse fallan bajo ciertas
circunstancias. En concreto, la primera solución fallará si la fecha de
nacimiento es un 29 de febrero (año bisiesto).
Una forma de evitar este error es creando un método .replace() para tipos date
para que sea más "seguro" cambiar sus atributos:
import datetime
class SureDate(datetime.date):
def replace(self, **kw):
day=kw.get("day",self.day)
kw["day"]=1
delta=datetime.timedelta(day)
return datetime.date.replace(self,kw)+delta
De esta manera:
dnacim=SureDate(2000,2,29).replace(year=2007)
en lugar de dar error por no existir 29 de febrero de 2007, devolverá 1 de
marzo de 2007 como resultado.
La solución quedaría completada así:
dnacim=SureDate(1976,05,26)
dhoy=SureDate.today()
edad=dhoy.year-dnacim.year
if dnacim.replace(year=dhoy.year)<dhoy:
edad-=1
Para la solución más general, la que saca años, meses y días, también le pasa
lo mismo, aparte de que calcula mal. He intentando crear una versión basada
en la clase SureDate, pero todavía no la he acabado. Quien necesite algo así,
tal vez la otra solución (la "compleja") le pueda servir mejor.
_______________________________________________
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