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…
Rotina que retorna Idade
6 Respostas
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();
}
}
}
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…
vlw…muito obrigado por me ajudar, se precisar de algo é só dizer
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
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/2007resultato: 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…
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();
}
}
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