Rotina que retorna Idade

6 respostas
M

Olá galera do PJ, gostaria de saber se alguém tem, ou sabe de algum lugar que tenha uma rotina no qual eu coloque uma data qualquer com dia mes e ano, ele compara com a do sistema e me retorna quantos dias, meses e anos…

6 Respostas

S
aí manhani acho que ta certo, só precisa arrumar algumas coisas de validação, principalmente para conta dos dias que sempre leva em consideração 30 dias por mes.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;



public class Data {

	public static void main(String[] args) {
		try {
			BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));   
			int dia,mes,ano,diaA,mesA,anoA,diaF,mesF,anoF;			
			System.out.println("Entre com dia");
			dia = Integer.parseInt(buf.readLine());
			System.out.println("Entre com mes");
			mes = Integer.parseInt(buf.readLine());
			System.out.println("Entre com ano");
			ano = Integer.parseInt(buf.readLine());
			Date atual = new Date();//pega a data de hoje
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(atual);//seta o calendário com a data atual

			
			diaA = calendar.get(calendar.DAY_OF_MONTH);//pega o dia de hoje
			mesA = calendar.get(calendar.MONTH)+1;//pega o mes atual
			anoA = calendar.get(calendar.YEAR);//pega o ano atual
			
			if(anoA >= ano)//se o ano passado pelo usuário é maior que o atual sempre coloca 9999
				anoF = anoA - ano;
			else
				anoF = 9999;			
			
			if(mesA >= mes)//se o mes passado pelo usuário é menor que o mes atual
				mesF = mesA - mes;//só faz a conta diretamente
			else{//se nao faz a diferenca entre 12 meses
				mesF = 12 - (mes-mesA);
				anoF -= 1;//retira 1 do ano pois significa que nao completou o ano
			}
			
			if(diaA >= dia)//mesmo esquema do mes se for maior nao completou o mes
				diaF = diaA - dia;
			else{
				diaF = 30 - (dia-diaA);
				mesF -=1;//entao tira um mes da conta
			}
			
			System.out.println(diaF+" Dia(s) "+(mesF)+" Mês(es) "+anoF+" Ano(s)");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
J

Acho que fica simples se você pegar a data de hoje, transformar em milissegundos, depois pegar a data que você quer subtrair também em milissegundos…

Acho que fica bem simples…

M

vlw…muito obrigado por me ajudar, se precisar de algo é só dizer

S

jason se voce fizer isso, voce a data que seria a atual menos a passada e não quanto tempo se passou.

tipo

Atual: 17/06/2008
Parametro: 17/06/2007

resultato: 0 dias 0 meses 1 ano

J

SdRuboW:
jason se voce fizer isso, voce a data que seria a atual menos a passada e não quanto tempo se passou.

tipo

Atual: 17/06/2008
Parametro: 17/06/2007

resultato: 0 dias 0 meses 1 ano

E a data atual menos a anterior não é a mesma coisa que a quantidade de tempo que passou???

Não entendi o que você escreveu…

S

não jason, o cara quer quanto tempo passou e não a data que é uma menos outra.
olha a diferença.

public static void main(String[] args) {
		try {
			BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
			int dia,mes,ano,diaA,mesA,anoA,diaF,mesF,anoF;			
			System.out.println("Entre com dia");
			dia = Integer.parseInt(buf.readLine());
			System.out.println("Entre com mes");
			mes = Integer.parseInt(buf.readLine());
			System.out.println("Entre com ano");
			ano = Integer.parseInt(buf.readLine());
			Date atual = new Date();//pega a data de hoje
			long dt1 = atual.getTime();
			long dt2 = (new Date(mes+"//"+dia+"//"+ano)).getTime();
			System.out.println(new Date(dt1-dt2));
		
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
isso aqui com o parametro 25/08/2000 dá como retorno 24/10/1977

com o outro códito retorna 22 dias 9 meses 7 anos, o resultado do método não é o que o manhani quer entendeu? a solução que você falou ta correta se você quiser a diferença entre datas e não quanto tempo passou

Criado 16 de junho de 2008
Ultima resposta 17 de jun. de 2008
Respostas 6
Participantes 3