Crie uma classe Java chamada Pessoa com os seguintes atributos privados:
nome;
Data de Nascimento;
Crie os métodos necessários para acessar estes atributos. Crie também um método chamado “informarIdade”, este método deve imprimir na tela a idade desta pessoa em anos, meses e dias. Crie um método main para criar um objeto da classe Pessoa, inicie os atributos “nome” e “Data de nascimento” e em seguida chame o método “informarIdade” para que o mesmo informe a idade desta Pessoa.
Fiz da seguinte forma:
[code]package ExerciciosCapitulo08;
import java.util.Calendar;
public class Pessoa {
private String nome;
private String dataNascimento;
Calendar c = Calendar.getInstance();
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(String dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void informarIdade() {
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH) + 1);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
}
public static void main(String[] agrs) {
Pessoa p = new Pessoa();
p.setNome("João");
p.setDataNascimento("18/02/1989");
p.informarIdade();
System.out.println(p.nome);
System.out.println(p.dataNascimento);
}
}
[/code]
Quando executo o resultado fica assim:
2011
7
22
João
18/02/1989
Está errado, porque teria que ficar:
Quantidade de anos: 22
Quantidade de meses:
Quantidade de dias:
Nome da pessoa: João
Quantidade de anos: idade 22
Sei que “Calendar c = Calendar.getInstance();” retorna a data atual que é o que está acontecendo. Dei uma lida em alguns tópicos do Guj e falam de “Gregoriancalendar” que podemos apresentar um calendário nosso. Será que preciso utilizar o GregorianCalendar? Como estou acompanhando a apostila e resolvendo os exercícios não explica nada sobre isso só explica sobre Calendar. No método informarIdade() como faço para buscar a data de nascimento do atributo dataNascimento? E também como calculo essa data 18/02/1989 para me mostrar que possui 22 anos.
public static void main(String[] argv) throws Exception {
String data = "07/03/1989";
Date dataNascimento = null;
try {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setLenient(false);
dataNascimento = df.parse(data);
} catch (ParseException ex) {
}
String idadeEmAnosMesesDias = calcularIdade(dataNascimento);
System.out.println("Idade: " + formatarIdade(idadeEmAnosMesesDias));
}
public static String calcularIdade(Date data) {
Integer anos = 0;
Integer meses = 0;
Integer dias = 0;
Calendar dataAtual;
Calendar dataNascimento;
dataAtual = Calendar.getInstance();
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(data);
anos = anos + (dataAtual.get(Calendar.YEAR) - dataNascimento.get(Calendar.YEAR));
meses = meses + (dataAtual.get(Calendar.MONTH) - dataNascimento.get(Calendar.MONTH));
dias = dias + (dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento.get(Calendar.DAY_OF_MONTH));
if (dataAtual.get(Calendar.MONTH) == dataNascimento.get(Calendar.MONTH)) {
if (dataAtual.get(Calendar.DAY_OF_MONTH) < dataNascimento.get(Calendar.DAY_OF_MONTH)) {
dias = 30 + dias;
meses = 12 + meses;
anos = anos - 1;
}
} else if (dataAtual.get(Calendar.MONTH) < dataNascimento.get(Calendar.MONTH)) {
if (dataAtual.get(Calendar.DAY_OF_MONTH) >= dataNascimento.get(Calendar.DAY_OF_MONTH)) {
meses = 12 + meses;
anos = anos - 1;
} else if (dataAtual.get(Calendar.DAY_OF_MONTH) < dataNascimento.get(Calendar.DAY_OF_MONTH)) {
dias = 30 + dias;
meses = 12 + meses;
anos = anos - 1;
}
} else if (dataAtual.get(Calendar.MONTH) > dataNascimento.get(Calendar.MONTH)) {
if (dataAtual.get(Calendar.DAY_OF_MONTH) < dataNascimento.get(Calendar.DAY_OF_MONTH)) {
dias = 30 + dias;
meses = meses - 1;
}
}
return formatar(anos, meses, dias);
}
/** Método responsável por formatar uma idade no formato 1 10 6.
* Concatena-se 0 se o valor menor que 10 e logo apos o numero adicionasse espaço.
*
* @return Data formatada para o formato 00 00 00.
*/
public static String formatar(Integer ano, Integer mes, Integer dia) {
String idade = "";
if (ano.intValue() < 10) {
idade = (new StringBuilder()).append(idade).append("0").append(ano).append(" ").toString();
} else {
idade = (new StringBuilder()).append(idade).append(ano).append(" ").toString();
}
if (mes.intValue() < 10) {
idade = (new StringBuilder()).append(idade).append("0").append(mes).append(" ").toString();
} else {
idade = (new StringBuilder()).append(idade).append(mes).append(" ").toString();
}
if (dia.intValue() < 10) {
idade = (new StringBuilder()).append(idade).append("0").append(dia).append(" ").toString();
} else {
idade = (new StringBuilder()).append(idade).append(dia).append(" ").toString();
}
return idade;
}
/** Pega os valores 00 00 00 e coloca Ano(s) Mes(es) Dia(s)
*/
public static String formatarIdade(String ida) {
String idade = "";
String anos = null;
String meses = null;
String dias = null;
String CharArray[] = ida.split(" ");
anos = CharArray[0];
meses = CharArray[1];
dias = CharArray[2];
if (!anos.equals("00")) {
if (anos.equals("01")) {
idade = idade.concat((new StringBuilder()).append(anos).append(" Ano ").toString());
} else {
idade = idade.concat((new StringBuilder()).append(anos).append(" Anos ").toString());
}
}
if (!meses.equals("00")) {
if (meses.equals("01")) {
idade = idade.concat((new StringBuilder()).append(meses).append(" M52s ").toString());
} else {
idade = idade.concat((new StringBuilder()).append(meses).append(" Meses ").toString());
}
}
if (!dias.equals("00")) {
if (dias.equals("01")) {
idade = idade.concat((new StringBuilder()).append(dias).append(" Dia ").toString());
} else {
idade = idade.concat((new StringBuilder()).append(dias).append(" Dias").toString());
}
}
return idade;
}
Este foi o código que eu quebrei a cabeça um tempo, procurei bastante na internet e não achei e fiquei com preguiça de procurar e resolvi fazer.
Os metodos Formatar e FormatarDn estão meio loucos com esse monte de append porque tive que recuperar esse código do jar que eu tinha compilado,
porque eu tinha perdido os fontes, dae quando recuperei ficou assim, porém funcionar normalmente.
Os metodos estão static pra poder rodar tudo em uma classe só.
Espero ter ajudado.
Tu não tava conseguindo porque tu pegava o instante atual e imprimia ele direto, não realizava os calculos pra saber a diferença entre a data atual e a data de nascimento.
package ExerciciosCapitulo08;
import java.util.Calendar;
public class Pessoa {
private String nome;
private String dataNascimento = "20/01/1989";
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(String dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void informarIdade() {
int anos = 0;
int meses = 0;
Integer dias = 0;
Calendar dataAtual;
Calendar dataNascimento;
dataAtual = Calendar.getInstance();
dataNascimento = Calendar.getInstance();
anos = anos
+ (dataAtual.get(Calendar.YEAR) - dataNascimento
.get(Calendar.YEAR));
System.out.println("João tem: " + anos + " anos ");
meses = meses
+ (dataAtual.get(Calendar.MONTH) - dataNascimento
.get(Calendar.MONTH));
System.out.println("João tem: " + meses + " meses ");
dias = dias
+ (dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento
.get(Calendar.DAY_OF_MONTH));
System.out.println("João tem: " + dias + " dias ");
}
public static void main(String[] agrs) {
Pessoa p = new Pessoa();
p.setDataNascimento("20/01/1989");
p.informarIdade();
System.out.println(p.dataNascimento);
}
}
Não consegui entender o método InformarIdade :?
Ainda não consigo buscar a data do atributo “dataNascimento”
E sobre imprimir quantos anos a pessoa tem não entendi.
Se você puder me ajudar…
Ola, oque você fez foi mostrar apenas o ano da data, porem deve-se fazer um calculo antes.
Recomendo a voce pegar o time(long) da data do nascimento com a data atual e subtrair, o valor resultante será o tempo de nascimento até hoje.
Agora é só calcular.
Esses longs das datas que vc pegou e o do resultado são milisegundos, todas datas são criadas sobre milisegundos.
pegue o resultado que é em milisegundos multiplique por 60 e terá em segundo, novamente por 60 e terá em horas, por 24 e terá em dias e assim sussecivamente.
Espero ter ajudado.
[quote=R$chieck]pegue o resultado que é em milisegundos multiplique por 60 e terá em segundo, novamente por 60 e terá em horas, por 24 e terá em dias e assim sussecivamente.
Espero ter ajudado.[/quote]
Só uma correção de milisegundos para segundos tem que dividir por 1000, de segundos para minutos dividir por 60, de minutos para horas dividir por 60
e de horas para dias dividir por 24.