[RESOLVIDO] Exibir idade com anos, meses, SEMANAS e dias

Olás

Já vi vários exemplos e sei que é um tópico recorrente, mas não consegui achar/resolver como faço para obter as semanas de uma idade relativa ao mês.
Preciso exibir a idade na forma: 52 anos, 10 meses, 2 semanas e 3 dias.

Quase consegui com uns exemplos usando a API Calendar fragmentando o getTimeInMillis() em semanas, mas quando a data fica abaixo de 1970, o retorno passa a ser negativo (bizarro…).

Valeu!

Sobre ficar negativo abaixo de 1970
foi porque esse comando ele está contando o tempo des de 1970 quando ele começou, antes disso ele fica negativo.

Se você pode usar APIs, use a JODA-Time.

Saladinha, valeu a explicação, mas é estranho, teoricamente uma função matemática cuidaria disso (pelo menos a paritir de DC).

Vini, show de bola o JODA, Obrigado!

Abaixo segue um resumo de como implementar.

import org.joda.time.*;   
import org.joda.time.format.*;   

DateTime start = new DateTime(dataNascimento);   
DateTime end = new DateTime(); 
	 
Period per = new Period (start, end);   
        
PeriodFormatter pf = new PeriodFormatterBuilder()   
.appendYears().appendSuffix (" ano, ", " anos, ").printZeroIfSupported()
.appendMonths().appendSuffix (" mês, ", " meses, ").printZeroIfSupported() 
.appendWeeks().appendSuffix (" semana e ", " semanas e ").printZeroIfSupported()   
.appendDays().appendSuffix (" dia ", " dias ").printZeroIfSupported() 
.printZeroIfSupported()
.toFormatter();   

System.out.println (pf.print(per));   

abs

[quote=pgnt]Saladinha, valeu a explicação, mas é estranho, teoricamente uma função matemática cuidaria disso (pelo menos a paritir de DC).

Vini, show de bola o JODA, Obrigado!

Abaixo segue um resumo de como implementar.

import org.joda.time.*;   
import org.joda.time.format.*;   

DateTime start = new DateTime(dataNascimento);   
DateTime end = new DateTime(); 
	 
Period per = new Period (start, end);   
        
PeriodFormatter pf = new PeriodFormatterBuilder()   
.appendYears().appendSuffix (" ano, ", " anos, ").printZeroIfSupported()
.appendMonths().appendSuffix (" mês, ", " meses, ").printZeroIfSupported() 
.appendWeeks().appendSuffix (" semana e ", " semanas e ").printZeroIfSupported()   
.appendDays().appendSuffix (" dia ", " dias ").printZeroIfSupported() 
.printZeroIfSupported()
.toFormatter();   

System.out.println (pf.print(per));   

abs

[/quote]

ya irmão fazer isso sem o uso da APi deve complicar muito porque os dias do ano são variaveis e os dias da semana também.

Sim, mas sabe que usando o getTimeInMillis() quase deu, ele acaba abstraindo variações de tempo, mas só funciona de 1970 pra cá.