Calcular de idade em Python incluindo anos bissextos
Boas galera!
Vou deixar aqui um código que acabei de criar de um método que recebe a data de nascimento em formato de string e retorna a idade. Eu tinha esse código em JAVA, fiz umas melhorias e adaptei para Python, para o novo sistema que estou desenvolvendo.
Deixo aí para quem precisar e também para minhas pesquisas futuras:
O método retorna a idade no padrão: AAa | AAa MMm | AAa MMm DDd, exemplos: 38a | 38a 14m | 38a 14m 5d
Deixei o parâmetro "tipo" podendo receber "a", "m", "d" apenas para facilitar a referência a "anos", "meses" e "dias", mas sintam-se à vontade para alterar depois!
Boa sorte!
from datetime import datetime,date
def calcularIdade(self,dtYYYYMMDD,tipo):
#dtYYYYMMDD: string de data no formato YYYY-MM-DD (exemplo: padrão SQL)
#tipo: Pode receber "a","m","d" -> a: retorna YYa | m: retorna YYa MMd | d: retorna YYa MMm DDd
dtDN = datetime.strptime(dtYYYYMMDD, '%Y-%m-%d').date()
dtHoje = date.today()
anoNasc = int(dtDN.strftime('%Y'))
anoHoje = int(dtHoje.strftime('%Y'))
mesNasc = int(dtDN.strftime('%m'))
mesHoje = int(dtHoje.strftime('%m'))
diaNasc = int(dtDN.strftime('%d'))
diaHoje = int(dtHoje.strftime('%d'))
dtNiver = datetime.strptime(str(anoHoje)+"-"+str(mesNasc)+"-"+str(diaNasc), '%Y-%m-%d').date()
diffAnos = anoHoje-anoNasc
diffMeses = mesHoje-mesNasc
diffDias = diaHoje-diaNasc
if dtHoje<dtNiver:#Ainda não fez aniversário esse ano!
diffAnos = anoHoje-anoNasc-1#Corrigindo o ano, pois ainda não fez aniversário
diffMeses = 12+diffMeses#Corrigindo os meses/diffMeses é negativo!!!
if diaHoje < diaNasc:#O mês ainda não virou
diffMeses = diffMeses-1
#Para o cálculo dos dias, é importante avaliar uma série de variáveis: Mês com 28,20,30 ou 31 dias
mes_anterior_31d = [1,2,4,6,9,11]
mes_anterior_30d = [5,7,8,10,12]
if mesHoje in mes_anterior_31d:
diffDias = (31-diaNasc)+diaHoje
elif mesHoje in mes_anterior_30d:
diffDias = (30-diaNasc)+diaHoje
else:
if anoHoje%4 == 0:#Cálculos para anos bissextos
diffDias = (29-diaNasc)+diaHoje
else:#Anos não bissextos
diffDias = (28-diaNasc)+diaHoje
if tipo == "a":
return str(diffAnos)+"a"
elif tipo == "m":
return str(diffAnos)+"a "+str(diffMeses)+"m "
else:
return str(diffAnos)+"a "+str(diffMeses)+"m "+str(diffDias)+"d"
Exemplo de chamada:
print(self.calcularIdade("1981-09-11","d"))
Discussão (0)
Carregando comentários...