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 ?
publicstaticvoidmain(Stringargs[])throwsParseException{SimpleDateFormatsd=newSimpleDateFormat("dd/MM/yyyy");Calendarcal=Calendar.getInstance();StringdataDoDia=sd.format(newDate());Datedata=null;data=sd.parse(dataDoDia);cal.setTime(data);cal.set(Calendar.DAY_OF_MONTH,cal.getActualMinimum(Calendar.DAY_OF_MONTH));finalDateprimeiroDia=newDate(cal.getTimeInMillis());Stringprimeiro=sd.format(primeiroDia);System.out.println("Primeiro dia Mes Atual: "+primeiro);cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DAY_OF_MONTH));finalDateultimoDia=newDate(cal.getTimeInMillis());Stringultimo=sd.format(ultimoDia);System.out.println("Ultimo dia Mes Atual: "+ultimo);}
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
ONHATE
//Volta um mês...GregorianCalendarcl=newGregorianCalendar();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 últimointdate=cl.getMaximum(GregorianCalendar.DATE);cl.set(GregorianCalendar.DATE,date);System.out.println(cl.getTime());
ONHATE
//Volta um mês...GregorianCalendarcl=newGregorianCalendar();cl.roll(GregorianCalendar.MONTH,-1);if(cl.get(GregorianCalendar.MONTH)==GregorianCalendar.DECEMBER){cl.roll(GregorianCalendar.YEAR,-1);}//Pega o primeirointdate=cl.getMinimum(GregorianCalendar.DATE);cl.set(GregorianCalendar.DATE,date);System.out.println(cl.getTime());//Pega o últimodate=cl.getMaximum(GregorianCalendar.DATE);cl.set(GregorianCalendar.DATE,date);System.out.println(cl.getTime());
Para padronizar...
R
robsonsan
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... GregorianCalendarcl=newGregorianCalendar();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
ONHATE
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…
R
robsonsan
entendi agora essa parte
//Volta um mês... GregorianCalendarcl=newGregorianCalendar();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 ?
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... GregorianCalendarcl=newGregorianCalendar();DateFormatformatter=newSimpleDateFormat("dd/MM/yyyy");DatedataDigitada=(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 intdate=cl.getMinimum(GregorianCalendar.DATE);cl.set(GregorianCalendar.DATE,date);DateprimeiroDia=cl.getTime();System.out.println("Primeiro dia: "+formatter.format(primeiroDia));//Pega o último date=cl.getMaximum(GregorianCalendar.DATE);cl.set(GregorianCalendar.DATE,date);DateultimoDia=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
ONHATE
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…