Imprimir quantidade de dias, meses e ano atraves de uma data

3 respostas
Icavalera

Preciso imprimir a quantidade de anos, meses e dias de uma pessoa através da data de nascimento.
Exemplo : 12Anos 3Meses 20Dias

Consegui chegar perto, mas dai veio as validações de meses com 30 dias ou meses com 31 dias ainda tem fevereiro e anos biossestos hahaha
Alguem tem alguma idéia ae?

3 Respostas

skalinichenko

Ela (a pessoa) passando a data atual?

Flw!

Z111

camarada, uma vez fiz uma parada dessas, lembro mais ou menos, então, testa ae e posta o resultado:

observe o detalhe da constante MONTH de calendar que não é de 1 a 12, mas de 0 a 11, sendo 0 janeiro e 11 dezembro. Então, na criação da data (1973, 7, 25) deverah criar a data de 25/08/1973.

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		
		Calendar nascimento = new GregorianCalendar(1973, 7, 25);
		
		
		Calendar hoje = Calendar.getInstance(); // (13/04/2009) 

		System.out.println(nascimento.compareTo(hoje));
		
		int anos = hoje.get(Calendar.YEAR) - nascimento.get(Calendar.YEAR); // 36 anos (porém ainda não, só em agosto)
		
		if (hoje.get(Calendar.MONTH) <= nascimento.get(Calendar.MONTH)) // então vamos ver se hoje já chegou em agosto
			if (hoje.get(Calendar.DAY_OF_MONTH) < nascimento.get(Calendar.DAY_OF_MONTH)) // e se hoje é o dia 25 (então seria o aniversário)
				--anos; // não é, então a criatura tem 35 anos
		// anos: 35
		
		int meses = hoje.get(Calendar.MONTH) - nascimento.get(Calendar.MONTH);
		// hoje seria a diferença de -4 meses, o que é incorreto para a proposição
		// então precisamos verificar e ajustar a parada
		meses = (meses < 0) ? (12 + meses) : meses; 
		
		int dias = hoje.get(Calendar.DAY_OF_MONTH) - nascimento.get(Calendar.DAY_OF_MONTH);
		// diferença de dias (não pode ser negativo
		dias = (dias < 0) ? -dias : dias;
Icavalera

Eu consegui aqui …
Obrigado pela ajuda!!!

private String calculaIdade(Date d1, Date d2) {
		int monthDay[] =  { 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		Calendar fromDate = Calendar.getInstance();
		Calendar toDate = Calendar.getInstance();
		int year = 0;
		int month = 0;
		int day = 0;
		int increment = 0;
		if (d1.compareTo(d2)>0) {
			fromDate.setTime(d2);
			toDate.setTime(d1);
		}
		else {
			fromDate.setTime(d1);
			toDate.setTime(d2);
		}
		if (fromDate.get(Calendar.DAY_OF_MONTH) > toDate.get(Calendar.DAY_OF_MONTH)) {
			increment = monthDay[fromDate.get(Calendar.MONTH) - 1];
		}
		if (increment == -1) {
			GregorianCalendar gc = new GregorianCalendar();
			if (gc.isLeapYear(fromDate.get(Calendar.YEAR))) {
				increment = 29;
			} else {
				increment = 28;
			}
		}
		if (increment != 0) {
			day = (toDate.get(Calendar.DAY_OF_MONTH) + increment) - fromDate.get(Calendar.DAY_OF_MONTH);
			increment = 1;
		} else {
			day = toDate.get(Calendar.DAY_OF_MONTH) - fromDate.get(Calendar.DAY_OF_MONTH);
		}
		if ((fromDate.get(Calendar.MONTH) + increment) > toDate.get(Calendar.MONTH)) {
			month = (toDate.get(Calendar.MONTH) + 12) - (fromDate.get(Calendar.MONTH) + increment);
			increment = 1;
		} else {
			month = (toDate.get(Calendar.MONTH)) - (fromDate.get(Calendar.MONTH) + increment);
			increment = 0;
		}
		year = toDate.get(Calendar.YEAR) - (fromDate.get(Calendar.YEAR) + increment);
				
		return (year + " anos " + month + ", meses " + day + ", dias");
	}
Criado 8 de abril de 2009
Ultima resposta 13 de abr. de 2009
Respostas 3
Participantes 3