klonder 14 Denunciar post Postado Fevereiro 11, 2020 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")) Compartilhar este post Link para o post Compartilhar em outros sites