complicação de Date[RESOLVIDO]

Olá pessoal do GUJ. Este é meu 1º post. A dúvida é a seguinte: Estou querendo guardar a hora do sistema e uso o Calendar dataActual = Calendar.getInstance(); até aki blz. Depois peço ao usuário que insira os valores para ano, mes e dia. e atribuo na sua data de nascimentodatNasc.set(ano, mes - 1, dia); Logo aqui se não colocar mes-1, vai dar erro mais à frente, mas seguindo.
Depois quando crio um objeto SimpleDateFormat, para poder converter Date em String SimpleDateFormat s = new SimpleDateFormat("dd/mm/yyyy"); String a = s.format(datNasc.getTime()); System.out.println(a);
A data fica baralhada no mês.
Este método faz parte de uma classe de de Contatos, que deveria poder pegar na data de nascimento de um contato e dizer quantos dias faltam para seu aniversário e se é dia de aniversário. Mas não conseguindo fazer o override do método toString, porque não consegue imprimir Date. então o que estou querendo é: Saber como corrigir o engano ao imprimir o mês e poder fazer a conversão para String, sem o mês aparecer 16 mêses a seguir do que é esperado.

Bom trabalho
abr p o GUJ

[code] public Calendar criaData() {
// Declaração das variaveis e dos calendarios.
int anoActual, anoNasc;
int mesActual, mesNasc;
int diaActual, diaNasc;
Calendar dataActual = Calendar.getInstance();
Calendar datNasc = Calendar.getInstance();

    //Atribuindo valores às variaveis.
    int ano, mes, dia;
    System.out.println("Insira ano");
    Scanner sc = new Scanner(System.in);
    ano = sc.nextInt();
    System.out.println("Insira mes");
    mes = sc.nextInt();
    System.out.println("Insira dia");
    dia = sc.nextInt();

// dataNasc.set(ano, mes - 1, dia, 12, 0);
datNasc.set(ano, mes - 1, dia);
SimpleDateFormat s = new SimpleDateFormat(“dd/mm/yyyy”);
String a = s.format(datNasc.getTime());
System.out.println(a);
anoActual = dataActual.get(Calendar.YEAR);
System.out.println("ano ac " + anoActual);
anoNasc = datNasc.get(Calendar.YEAR);
System.out.println("ano " + anoNasc);

    mesActual = dataActual.get(Calendar.MONTH);
    System.out.println("mes ac " + (mesActual + 1));
    mesNasc = datNasc.get(Calendar.MONTH);
    System.out.println("mes " + (datNasc.get(Calendar.MONTH) + 1));

    diaActual = dataActual.get(Calendar.DAY_OF_MONTH);
    System.out.println("dia ac " + diaActual);
    diaNasc = datNasc.get(Calendar.DAY_OF_MONTH);
    System.out.println("dia " + diaNasc);

    //Impressão  
    System.out.println("Atual\nAno : " + anoActual + "\tMes: "
            + (mesActual + 1) + "\tDia: " + diaActual);
    System.out.println("Nascimento\nAno : " + anoNasc + "\tMes: " + (mesNasc + 1)
            + "\tdia: " + diaNasc);
    System.out.println("Idade: " + (anoActual - anoNasc));
    // System.out.println("Faltam " + (mesActual - mesNasc) + " meses p niver");
    // System.out.println("Faltam " + (diaActual - diaNasc) + " dias p niver");
    if ((mesActual == mesNasc) && (diaActual == diaNasc)) {
        System.out.println("Hoje é dia de Aniversário");
    } else {
        System.out.println("Não é dia de Aniversário");
    }
    return dataNasc;
}[/code]

Olá Mxjd,

A princípio o problema está no SimpleDateFormat, “mm” minúsculo é pra Minutos e não Meses.
O correto seria:

SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");  

Dá uma olhadinha neste tópico:
http://www.guj.com.br/articles/8

Boa sorte!

tem uma API do próprio Java que trata datas é o JODATIME…dê uma pesquisada e verá as muitas utlidades dela.

Vlw a tds vcs!! :lol:

[quote]Olá Mxjd,

A princípio o problema está no SimpleDateFormat, “mm” minúsculo é pra Minutos e não Meses.
O correto seria:
view plaincopy to clipboardprint?

SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy");    

Dá uma olhadinha neste tópico:
http://www.guj.com.br/articles/8

Boa sorte![/quote]

Oi jamirdeajr

Eu tenho apenas 3 meses de Java. Tem algumas coisas que me fazem confusão. No artigo que vc m indicou, fala da classe GregorianCalendar, que me parece bem mais complicado, poerque envolve milisegundos… Bom mas de qualquer forma estão faltando informações no artigo, nomeadamente no final, quando seria para comparar o conteúdo das String’s.
Se conseguir me dar o link para a página completa, eu te agradeço.

Vlw

Bom dia, mxajd!

Com a classe Calendar você tem que fazer mes - 1 pois os meses iniciam em 0 (zero), ou seja, 0 equivale a Janeiro … 11 equivale a Dezembro.

Para comparar as datas, transforme-as em String e compare com o método String.equals(String) pois ao comparar objetos Calendar a precisão é de milisegundos o que não é interessanta para o seu caso.

E como amigo jamirdeajr já alertou, no SimpleFormat mês é com “MM” e não “mm”, que representa minutos.

Qualquer dúvida é só perguntar.

Abraço!

Olá mxjd,

Você tem razão, esse link que passei pode causar um pouco de confusão por incluir o GregorianCalendar.
O que eu queria passar era somente a questão da formatação que é citada lá e também o link que aparece lá
para a documentação do SimpleDateFormat http://java.sun.com/j2se/1.4/docs/api/java/text/SimpleDateFormat.html.

Sobre o teu código dei uma olhada e vi que alterando a questão do ‘MM’ já funciona, a comparação que você precisa
é para aniversário então do jeito que você fez já está correto (comparar somente dia e mês, sem o ano).

E, o grande Vingdel já deu uma explicação bem melhor dos outros itens, incluindo essa questão do mês - 1 que sempre causa
um pouco de confusão, mas que você também já estava fazendo certo!

Qualquer dúvida estamos aí pra ajudar!

Boa sorte no aprendizado Java, seja bem vindo!

Obrigado a tds vcs!!! Que sorte a minha!

cumpz :oops:

mxjd, boa noite!

Já que está tudo resolvido, por favor, adicione [RESOLVIDO] ao título do tópico, basta você editar a primeira postagem que você fez.

Abraço!