Simples cálculo de idade

2,796 views
Skip to first unread message

Mário Neto

unread,
Nov 25, 2010, 8:42:03 AM11/25/10
to pug...@googlegroups.com
Bom dia, alguém porquê fazendo esse simples calculo de idade em python, só retorna 28 anos se for apartir do dia 03/12/1981 ?

>> from datetime import datetime
>> now = datetime.now()
>> dob = datetime(1981,12,3)
>> dif = now - dob
>> dif.days/365
28

Por exemplo, se eu colocar dia 02/12/1981 dá 29 anos, como pode isso, se o cara ainda nem fez 29 anos. hehe ...

--
Att. Mário A. Chaves Neto
Designer / U.I. Engineer
MBA - Design Digital

Roberto Alcântara

unread,
Nov 25, 2010, 8:44:46 AM11/25/10
to pug...@googlegroups.com
Ele te deu a quantidade de dias... o problema é que voce dividiu sem
considerar quem nem todos os anos possuem 365 dias...

 - Roberto

2010/11/25 Mário Neto <macnd...@gmail.com>:

> --
> ----- PugCE.Org - Python Users Group Ceará -----
> pugc...@gmail.com
>
> http://pug-ce.python.org.br/
> http://pug-ce.python.org.br/wiki/
> http://groups.google.com/group/pug-ce?hl=pt-BR
> irc.freenode.org - #pugce
>

Mário Neto

unread,
Nov 25, 2010, 8:47:31 AM11/25/10
to pug...@googlegroups.com
Como seria a forma mais correta de calcular idade em python?

Em 25 de novembro de 2010 10:44, Roberto Alcântara <rob...@eletronica.org> escreveu:
Ele te deu a quantidade de dias... o problema é que voce dividiu sem
considerar quem nem todos os anos possuem 365 dias...

 - Roberto



2010/11/25 Mário Neto <macnd...@gmail.com>:
> Bom dia, alguém porquê fazendo esse simples calculo de idade em python, só
> retorna 28 anos se for apartir do dia 03/12/1981 ?
>>> from datetime import datetime
>>> now = datetime.now()
>>> dob = datetime(1981,12,3)
>>> dif = now - dob
>>> dif.days/365
> 28
> Por exemplo, se eu colocar dia 02/12/1981 dá 29 anos, como pode isso, se o
> cara ainda nem fez 29 anos. hehe ...
> --
> Att. Mário A. Chaves Neto
> Designer / U.I. Engineer
> MBA - Design Digital
>
> --
> ----- PugCE.Org - Python Users Group Ceará -----
--
----- PugCE.Org - Python Users Group Ceará -----
               pugce.org@gmail.com

Roberto Alcântara

unread,
Nov 25, 2010, 8:51:43 AM11/25/10
to pug...@googlegroups.com
http://stackoverflow.com/questions/2217488/age-from-birthdate-in-python

 - Roberto

>> > pugc...@gmail.com


>> >
>> > http://pug-ce.python.org.br/
>> > http://pug-ce.python.org.br/wiki/
>> > http://groups.google.com/group/pug-ce?hl=pt-BR
>> > irc.freenode.org - #pugce
>> >
>>
>> --
>> ----- PugCE.Org - Python Users Group Ceará -----

>>                pugc...@gmail.com


>>
>> http://pug-ce.python.org.br/
>> http://pug-ce.python.org.br/wiki/
>> http://groups.google.com/group/pug-ce?hl=pt-BR
>> irc.freenode.org - #pugce
>
>
>
> --
> Att. Mário A. Chaves Neto
> Designer / U.I. Engineer
> MBA - Design Digital
>

> --
> ----- PugCE.Org - Python Users Group Ceará -----

> pugc...@gmail.com

Moacir Bispo Bezerra Filho

unread,
Nov 25, 2010, 8:57:19 AM11/25/10
to pug...@googlegroups.com
Aqui vai um algoritomo para o que você quer (achei na internet... mas funciona direitinho)

from datetime import datetime
def yearsago(years, from_date=None):
    if from_date is None:
        from_date = datetime.now()
    try:
        return from_date.replace(year=from_date.year - years)
    except:
        # Must be 2/29!
        assert from_date.month == 2 and from_date.day == 29 # can be removed
        return from_date.replace(month=2, day=28,
                                 year=from_date.year-years)

def num_years(begin, end=None):
    if end is None:
        end = datetime.now()
    num_years = int((end - begin).days / 365.25)
    if begin > yearsago(num_years, end):
        return num_years - 1
    else:
        return num_years

---------------------------------------------------------------------------------------------

As vezes é mais rápido procurar e utilizar do que desenvolver você mesmo. Deixe para desenvolver alguma coisa que realmente importe.





Em 25 de novembro de 2010 10:44, Roberto Alcântara <rob...@eletronica.org> escreveu:
Ele te deu a quantidade de dias... o problema é que voce dividiu sem
considerar quem nem todos os anos possuem 365 dias...

 - Roberto



2010/11/25 Mário Neto <macnd...@gmail.com>:
> Bom dia, alguém porquê fazendo esse simples calculo de idade em python, só
> retorna 28 anos se for apartir do dia 03/12/1981 ?
>>> from datetime import datetime
>>> now = datetime.now()
>>> dob = datetime(1981,12,3)
>>> dif = now - dob
>>> dif.days/365
> 28
> Por exemplo, se eu colocar dia 02/12/1981 dá 29 anos, como pode isso, se o
> cara ainda nem fez 29 anos. hehe ...
> --
> Att. Mário A. Chaves Neto
> Designer / U.I. Engineer
> MBA - Design Digital
>
> --
> ----- PugCE.Org - Python Users Group Ceará -----
--
----- PugCE.Org - Python Users Group Ceará -----
               pugce.org@gmail.com

Mário Neto

unread,
Nov 25, 2010, 9:13:55 AM11/25/10
to pug...@googlegroups.com
legal os exemplos, o ruim eh que existe esse "bug" em nosso calendário (29 fev.), aí o cara é obrigado a fazer algumas gambiarras =/
valeu!


>> >
>> > http://pug-ce.python.org.br/
>> > http://pug-ce.python.org.br/wiki/
>> > http://groups.google.com/group/pug-ce?hl=pt-BR
>> > irc.freenode.org - #pugce
>> >
>>
>> --
>> ----- PugCE.Org - Python Users Group Ceará -----
>>                pugce.org@gmail.com

>>
>> http://pug-ce.python.org.br/
>> http://pug-ce.python.org.br/wiki/
>> http://groups.google.com/group/pug-ce?hl=pt-BR
>> irc.freenode.org - #pugce
>
>
>
> --
> Att. Mário A. Chaves Neto
> Designer / U.I. Engineer
> MBA - Design Digital
>
> --
> ----- PugCE.Org - Python Users Group Ceará -----
               pugce.org@gmail.com

Moacir Bispo Bezerra Filho

unread,
Nov 25, 2010, 11:54:19 AM11/25/10
to pug...@googlegroups.com
O problema é que o nosso calendário é uma gambiarra!
mas detalhes em: http://www.mat.uc.pt/~helios/Mestre/H01orige.htm
Por isso é que não tem uma formula matemática, simples e direta para fazer isso.
Reply all
Reply to author
Forward
0 new messages