complicação de Date[RESOLVIDO]

8 respostas
mxajd
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 nascimento
datNasc.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
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;
    }

8 Respostas

jamirdeajr

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!

luxu

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

mxajd

Vlw a tds vcs!! :lol:

mxajd

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!

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

Vingdel

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!

jamirdeajr

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!

mxajd

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

cumpz :oops:

Vingdel

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!

Criado 8 de janeiro de 2012
Ultima resposta 9 de jan. de 2012
Respostas 8
Participantes 4