Comparar e somar datas no formato yyyymm

2 respostas
K

Olá Pessoal !!
Seguinte… Sou uma negação pra trabalhar com datas :oops:
Preciso muito da ajuda de vcs.

Eu preciso fazer o seguinte:

1 - Tenho 2 datas que só devo levar em consideração mes e ano.
2 - Enquanto uma data não for igual a outra, ele deve fazer algo
3 - O Formato deve ser: yyyymm

O algoritmo é o +/- o seguinte (mas não sei como fazer de forma q funcione hehe… nunca mexo com datas e é nisso q dá :frowning: ):
É por ai…

StringBuffer sb = new StringBuffer();
oldDate = 200808;  //  08/2008
currentDate = 200907;  //  07/2009

while( currentDate >= oldDate){
       sb.append(oldDate + " ");
       oldDate.add(Calendar.MONTH, 1);
}

Bem…
A saída esperada, no sb, é: 200808 200809 200810 200811 200812 200901 200902 200903 200904 200905 200906 200907

Como faço no caso de comparar 2 datas no formato yyyymm ?
E como adicionar 1 mes nessa data, com esse formato ?

Isso q está sendo ruim pra fazer…
Não encontrei nada parecido no google…

Obrigado

2 Respostas

M

Vê se isso te ajuda cara!

Calendar c = Calendar.getInstance();
        c.set(Calendar.MONTH, 9); // isso define o mês, e é indexado com 0 então mes 9 = outubro e nao setembro!
        c.set(Calendar.YEAR, 2010); // 2010
        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
        System.out.println(df.format(c.getTime())); // isso imprime a data do objeto 'c' DD/10/2010 onde DD é aparentemente o dia de hoje
        Calendar c2 = Calendar.getInstance();
        c2.set(Calendar.MONTH, 8); // define o mes como setembro
        c2.set(Calendar.YEAR, 2010); // ano 2010
        System.out.println(df.format(c2.getTime())); // isso imprime a data do objeto 'c2' DD/09/2010 onde DD é aparentemente o dia de hoje
        // agora vamos fazer o que você quer... que é comparar datas!
        while ((c.get(Calendar.MONTH) != c2.get(Calendar.MONTH)) || (c.get(Calendar.YEAR) != c2.get(Calendar.YEAR))) {
            // aqui eu to dizendo pra ele entrar no loop caso o mês OU o ano das datas sejam diferentes!
            // método get(field) retorna o numero do campo da data que voce pedir.. entao... enquanto um for diferente do outro ele deve continuar o loop
            // aqui você tem que fazer o que voce quer... vamos dizer que voce queira incrementar c2(setembro) até chegar em outubro
            c2.add(Calendar.MONTH, +1);
        }
        System.out.println(df.format(c2.getTime())); // aqui mostra que c2 foi incrementado e mostra a nova data! DD/10/2010
K
Murl:
Vê se isso te ajuda cara!
Calendar c = Calendar.getInstance();
        c.set(Calendar.MONTH, 9); // isso define o mês, e é indexado com 0 então mes 9 = outubro e nao setembro!
        c.set(Calendar.YEAR, 2010); // 2010
        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
        System.out.println(df.format(c.getTime())); // isso imprime a data do objeto 'c' DD/10/2010 onde DD é aparentemente o dia de hoje
        Calendar c2 = Calendar.getInstance();
        c2.set(Calendar.MONTH, 8); // define o mes como setembro
        c2.set(Calendar.YEAR, 2010); // ano 2010
        System.out.println(df.format(c2.getTime())); // isso imprime a data do objeto 'c2' DD/09/2010 onde DD é aparentemente o dia de hoje
        // agora vamos fazer o que você quer... que é comparar datas!
        while ((c.get(Calendar.MONTH) != c2.get(Calendar.MONTH)) || (c.get(Calendar.YEAR) != c2.get(Calendar.YEAR))) {
            // aqui eu to dizendo pra ele entrar no loop caso o mês OU o ano das datas sejam diferentes!
            // método get(field) retorna o numero do campo da data que voce pedir.. entao... enquanto um for diferente do outro ele deve continuar o loop
            // aqui você tem que fazer o que voce quer... vamos dizer que voce queira incrementar c2(setembro) até chegar em outubro
            c2.add(Calendar.MONTH, +1);
        }
        System.out.println(df.format(c2.getTime())); // aqui mostra que c2 foi incrementado e mostra a nova data! DD/10/2010

Fala cara !
Obrigado pela ajuda.
Eu fiz da seguinte forma, e tive o resultado esperado:

StringBuffer sb = new StringBuffer();
       SimpleDateFormat formatter = new SimpleDateFormat("yyyyMM");
       Calendar currentDate = Calendar.getInstance();

       Calendar oldDate = Calendar.getInstance();
       oldDate.set(Calendar.MONTH, 7);
       oldDate.set(Calendar.YEAR, 2008);

       while ( Integer.parseInt(formatter.format(currentDate.getTime())) >= Integer.parseInt(formatter.format(oldDate.getTime())) ) {
           sb.append(formatter.format(oldDate.getTime()) + " ");
           oldDate.add(Calendar.MONTH, +1);
       }
A saída foi: 200808 200809 200810 200811 200812 200901 200902 200903 200904 200905 200906 200907 Exatamente oq eu precisava... Sei q isso foi mais um POG dq qq outra coisa, mas preciso disso funcionando pra amanhã no mais tardar :lol: Então, depois fatoro pra uma versão mais rapida e simples.

VLW !!!

Criado 18 de julho de 2009
Ultima resposta 19 de jul. de 2009
Respostas 2
Participantes 2