GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Data atual java


#1

Feras fiz este algoritmo que pega o primeiro dia do mês e o ultimo dia dia do mês da data atual

como que eu faço para pegar o primeiro dia do mês anterior e ultimo dia do mês anterior baseado na data atual ?

    public static void main(String args[]) throws ParseException {
    	SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
    	Calendar cal = Calendar.getInstance();
        String dataDoDia = sd.format(new Date());
        Date data = null;
        data = sd.parse(dataDoDia);       
        cal.setTime(data);
            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
            final Date primeiroDia = new Date(cal.getTimeInMillis());
            String primeiro = sd.format(primeiroDia);
            System.out.println("Primeiro dia Mes Atual: " + primeiro);
            cal.set(Calendar.DAY_OF_MONTH , cal.getActualMaximum(Calendar.DAY_OF_MONTH));
            final Date ultimoDia = new Date(cal.getTimeInMillis());
            String ultimo = sd.format(ultimoDia);
            System.out.println("Ultimo dia Mes Atual: " + ultimo);
    	}

#2

Se entendi...

Você quer com a data atual... ou qualquer outra data... pegar a primeira e a última do mês? Isso?


#3

ONHATE

não porque isso estou fazendo no codigo acima

Eu quero baseado na data atual com o new Date() pegar o 1° dia e o Ultimo dia do MÊS ANTERIOR


#4

Dá uma olhada no método add() da classe Calendar: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#add(int, int)


#5

amhfilho

vc poderia dar um exemplo porque estou vendo o link que vc envio até mesmo antes mas não achei a minha solução ainda


#6

        //Volta um mês...
        GregorianCalendar cl = new GregorianCalendar();
        cl.roll(GregorianCalendar.MONTH, -1);
        if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {
            cl.roll(GregorianCalendar.YEAR, -1);
        }
        //Pega o primeiro... sempre 1 não?? =)
        /*
         * Mas se quiser
         * int date = cl.getMinimum(GregorianCalendar.DATE);
         * cl.set(GregorianCalendar.DATE, date);
         */
        cl.set(GregorianCalendar.DATE, 1);
        System.out.println(cl.getTime());
        //Pega o último
        int date = cl.getMaximum(GregorianCalendar.DATE);
        cl.set(GregorianCalendar.DATE, date);
        System.out.println(cl.getTime());

#7

        //Volta um mês...
        GregorianCalendar cl = new GregorianCalendar();
        cl.roll(GregorianCalendar.MONTH, -1);
        if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {
            cl.roll(GregorianCalendar.YEAR, -1);
        }
        //Pega o primeiro
        int date = cl.getMinimum(GregorianCalendar.DATE);
        cl.set(GregorianCalendar.DATE, date);
        System.out.println(cl.getTime());
        //Pega o último
        date = cl.getMaximum(GregorianCalendar.DATE);
        cl.set(GregorianCalendar.DATE, date);
        System.out.println(cl.getTime());

Para padronizar...


#8

ONHATE

o primeiro dia sempre vai ser 1 mesmo vc esta certo, agora seu codigo esta dando certo mais gostaria de entender esse trecho aqui

			 //Volta um mês...  
			 GregorianCalendar cl = new GregorianCalendar();  
			 cl.roll(GregorianCalendar.MONTH, -1);  
			 if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {  
			     cl.roll(GregorianCalendar.YEAR, -1);  
			 }

esse if porque esta GregorianCalendar.DECEMBER e se eu quiser setar algumas datas de outros meses para ver se traz o mes anterior ao que eu setar

exemplo aqui ele esta pegando a data atual

e se eu quiser setar uma data tipo 15/03/2011 ai o seu codigo teria que printar pra mim
Primeiro dia = 01/02/2011
Ultimo dia = 28/02/2011


#9

Esse teste com dezembro é para ver se tem que diminuir um ano tbm...
olha só..
hoje = 03/01/2011
se voltar um mês = 03/12/2011 -> 2011 e tem que ser 2010
então volta um ano tbm...

No calendar.. qualquer um... se trabalha com os "tempos" separados, mês, dia, ano, horas... e assim vai...
para cada um pode aumentar ou diminuir...

Se quiser ir para o dia 15/03/2011
No começo do seu código pode fazer isso... logo após instanciar ou na própria instancia mesmo tem os parametros.. e depois segue o mesmo código...


#10

entendi agora essa parte

			 //Volta um mês...  
			 GregorianCalendar cl = new GregorianCalendar();  
			 cl.roll(GregorianCalendar.MONTH, -1);  
			 if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {  
			     cl.roll(GregorianCalendar.YEAR, -1);  
			 }

mais como posso testar outras datas com meses variados vc pode dar um exemplo ?


#11

http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

Tem tudo ai ...
A API do Java é muito boa!


#12

estou testando com outras datas porém o ultimo dia do mês anterior esta vindo errado o codigo e o que esta abaixo

			 //Volta um mês...  
			 GregorianCalendar cl = new GregorianCalendar();
			 DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
			 Date dataDigitada = (Date)formatter.parse("15/03/2011"); 
			 cl.setTime(dataDigitada);
			 cl.roll(GregorianCalendar.MONTH, -1);  
			 if (cl.get(GregorianCalendar.MONTH) == GregorianCalendar.DECEMBER) {  
			     cl.roll(GregorianCalendar.YEAR, -1);  
			 }  
			 //Pega o primeiro  
			 int date = cl.getMinimum(GregorianCalendar.DATE);  
			 cl.set(GregorianCalendar.DATE, date);
			 Date primeiroDia = cl.getTime();
			 System.out.println("Primeiro dia: " +  formatter.format(primeiroDia));  
			 //Pega o último  
			 date = cl.getMaximum(GregorianCalendar.DATE);  
			 cl.set(GregorianCalendar.DATE, date); 
			 Date ultimoDia = cl.getTime();
			 System.out.println("Ultimo dia: " +  formatter.format(ultimoDia));

a saida deste codigo e

Primeiro dia: 01/02/2011
Ultimo dia: 03/03/2011


#13

Troca:
getMinimum por getActualMinimum
getMaximum por getActualMaximum

Para ele validar o mês atual, senão o getMaximum sempre retornar 31 pois é o máximo de todos os meses... analisando o atual... fevereiro... 28 ou 29...


#14

ONHATE

e isso mesmo valeu deu certo


#15