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